Apache重写规则

问题描述:

我想重定向“http://localhost/b.html” - >“http://localhost/a.html” 我尝试过RewriteRule。但不知何故,它不适合我。Apache重写规则

我使用的Apache2和我的httpd.conf包含:

LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_http_module modules/mod_proxy_http.so 
LoadModule proxy_connect_module modules/mod_proxy_connect.so 
LoadModule rewrite_module modules/mod_rewrite.so 

RewriteEngine On 
RewriteRule ^/b.html$ http://localhost/a.html 

当我至三 “http://localhost/a.html” 这说明我的网页。但是,当我的朋友“http://localhost/b.html”apache2/error_log说“文件不存在:b.html” 缺少启用rewrite_module的任何设置?

+0

您重新启动了Apache,对吧? – Greg 2009-04-16 07:19:51

问题出在您的RewriteRule中。这应该工作:

RewriteEngine On 
RewriteRule ^/b.html$ /a.html [L] 
  1. 规则匹配( ^b.html$)不得包含起始斜线。 (这个作品在.htaccess,但不能在服务器配置)
  2. 重写的目标应该是一个相对URI如果可能的话(即在同一台主机上)
  3. 规则应与指令“做什么”结束 - 在这种情况下,[L]檐口处理(不会再处理更多规则)
+1

此外,当您正在调试重写时,将规则放入DocumentRoot中的.htaccess会更容易 - 无需重新启动服务器。 – Piskvor 2009-04-16 07:34:32

+2

1. is for .htaccess - 当你在.conf中时,你需要/ 2.同意3.你不需要这个 - 当[L]已经是最后一个规则时不需要任何东西 – Greg 2009-04-16 07:40:13

您是否在虚拟主机部分中有?

<VirtualHost *:80> 
    RewriteEngine On 
    RewriteRule ^/b.html$ /a.html 
</VirtualHost> 

你检查是否在你的Apache配置文件(最有可能的httpd.conf)的别名或虚拟主机部分的指令:

AllowOverwrite All 

我的modrewrite不工作,因为我同样的问题关掉它:

AllowOverwrite None 

祝你好运。

现在有效。必须做两件事情:

  1. 更改设置 “AllowOverride无” 在/ etc/apache2的/网站可用/默认设置 “AllowOverride全部”。

  2. 把重写规则/var/www/.htaccess而非httpd.conf中

我不知道为什么它不工作在httpd.conf。但是在做了以上两件事情之后它就行得通。