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的任何设置?
答
问题出在您的RewriteRule中。这应该工作:
RewriteEngine On
RewriteRule ^/b.html$ /a.html [L]
-
规则匹配((这个作品在.htaccess,但不能在服务器配置)^b.html$
)不得包含起始斜线。 - 重写的目标应该是一个相对URI如果可能的话(即在同一台主机上)
- 规则应与指令“做什么”结束 - 在这种情况下,
[L]
檐口处理(不会再处理更多规则)
答
您是否在虚拟主机部分中有?
<VirtualHost *:80>
RewriteEngine On
RewriteRule ^/b.html$ /a.html
</VirtualHost>
答
你检查是否在你的Apache配置文件(最有可能的httpd.conf)的别名或虚拟主机部分的指令:
AllowOverwrite All
我的modrewrite不工作,因为我同样的问题关掉它:
AllowOverwrite None
祝你好运。
答
现在有效。必须做两件事情:
更改设置 “AllowOverride无” 在/ etc/apache2的/网站可用/默认设置 “AllowOverride全部”。
把重写规则/var/www/.htaccess而非httpd.conf中
我不知道为什么它不工作在httpd.conf。但是在做了以上两件事情之后它就行得通。
您重新启动了Apache,对吧? – Greg 2009-04-16 07:19:51