我需要重定向http://1.2.3.4/foo到http://1.2.3.4/WebFOO。我在 ApacheRoot\conf\httpd.conf 中创建的规则如下所示:
RewriteEngine On
RewriteRule ^/?foo /WebFOO [R,L]
然而,即使这个规则在语法上是正确的,这种方法也行不通。意味着我连接到http://1.2.3.4/foo并获取 404 或“/foo”的特定内容。注意:为了测试,我在 (htdocs/foo) 中创建了一个包含简单 index.html 的文件夹。这当然可以防止 404,但重定向仍然没有发生。
虚拟主机部分如下所示,位于 mod-rewrite 规则之下:
ServerName 1.2.3.4
<VirtualHost *:80>
ServerName 1.2.3.4:80
#Redirect permanent / https://1.2.3.4/
</VirtualHost>
为什么该重定向被完全忽略?我能否以某种方式检查服务器是否至少识别该规则(到目前为止 error.log 中没有重写条目)?
注意:为了确保规则的语法正确性,我还对其进行了测试http://htaccess.madewithlove.be:
不仅这个测试运行良好,而且诸如此类的事情也运行良好/foo/index.html
。它被正确地翻译成了/WebFOO/index.html
。
注意:按照 mod_rewrite 经典问题之一的建议启用详细日志记录回答不适合 apache 2.4:
- 这回答状态:
对于更复杂的规则,请使用 mod_rewrite 的 RewriteLog 指令将活动记录到文件中,并设置 RewriteLogLevel 3
自 Apache httpd 2.4 起,mod_rewrite RewriteLog 和 RewriteLogLevel 指令已被新的每个模块日志配置完全取代。
LogLevel alert rewrite:trace6
- 这API 批准:
重写日志
熟悉早期版本的 mod_rewrite 的人无疑会寻找 RewriteLog 和 RewriteLogLevel 指令。此功能已完全被上述新的每个模块日志配置所取代。要获取特定于 mod_rewrite 的日志消息,请通过 grep 管道传输日志文件:tail -f error_log|fgrep '[rewrite:'
[rewrite:
我的 ApacheRoot\logs\error.log 中没有任何条目
答案1
RewriteRule ^/foo$ WebFOO [R]
请尝试以下操作:
RewriteRule ^/?foo /WebFoo [R,L]
答案2
首先,为什么要在 vHost 之外定义 RewriteRule?尝试在 vHost 内定义规则。我还将 vHost 内的 ServerName 更正为:
ServerName 1.2.3.4
此外,LogLevel 部分应该位于 vHost 内。要查看 Rewrite 是否正常工作,请使用 Chrome 开发人员工具进行检查,您可以在那里检查是否获得 301。也许重定向后会获得 404?