Apache重写规则

时间:2009-04-16 07:17:55

标签: apache url-rewriting

我想重定向“http://localhost/b.html” - > “http://localhost/a.html” 我试过RewriteRule。但不知怎的,它对我不起作用。

我正在使用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?

4 个答案:

答案 0 :(得分:5)

问题在于你的RewriteRule。这应该有效:

RewriteEngine On
RewriteRule ^/b.html$ /a.html [L]
  1. 规则匹配(^b.html$)不得包含起始斜杠。(这适用于.htaccess,但不适用于服务器配置)
  2. 如果可能,重写目标应该是相对URI(即在同一主机上)
  3. 规则应该以指令“做什么”结束 - 在这种情况下[L] eave处理(不再处理规则)

答案 1 :(得分:3)

您是否在Apache配置文件(很可能是httpd.conf)中检查了Alias或VirtualHost部分的指令:

AllowOverride All

我有同样的问题,modrewrite无法正常工作,因为我把它关了:

AllowOverride None
祝你好运。

答案 2 :(得分:1)

你在虚拟主机部分内有它吗?

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

答案 3 :(得分:1)

现在有效。不得不做两件事:

  1. 将/ etc / apache2 / sites-available / default中的“AllowOverride None”更改为“AllowOverride All”。

  2. 将重写规则放在/var/www/.htaccess而不是httpd.conf

  3. 我不确定为什么它在httpd.conf中不起作用。但是在完成上述两件事后它才有效。