.htaccess文件适用于错误,但不适用于重写



我已经创建了一个 .htaccess 文件,可以让服务器为我提供自定义 404 页面。但是,当我尝试重写时,它不起作用。
htaccess 文件位于根目录中。

RewriteEngine On
RewriteRule /htaccessTest/index.php /htaccessTest/phpinfo.php 
ErrorDocument 404 /htaccessTest/errors/404_message.php

我不确定为什么这不起作用。我已经检查了phpinfo,在Apache2下,它指出mod_rewrite已被加载。
我真的被难住了。
不知道发生了什么!任何帮助都会很棒!

更新 1

根据下面突出显示的内容,我发现它仍然不起作用!我做了一些更改,现在我得到的只是 404 错误消息,除非我导航到索引页面。以下是更改:

ErrorDocument 404 /htaccessTest/errors/404_message.php
RewriteEngine On
RewriteRule ^htaccessTest/test.php$ /htaccessTest/phpinfo.php$ [L,NC]

我使用网址访问它:

localhost/htaccessTest/test.php

(忽略缺少 http://,我已经删除了,所以它不认为它是一个链接)。
还有什么想法吗?

谢谢

尝试不使用前导斜杠的规则:

ErrorDocument 404 /htaccessTest/errors/404_message.php
RewriteEngine On
RewriteRule ^htaccessTest/index.php$ /htaccessTest/phpinfo.php [L,NC]
  • 最好使用行开始/结束锚点,以避免匹配 URI 中的意外文本。
  • 点需要在正则表达式中转义,否则匹配任何字符。
  • .htaccess是每个目录指令,Apache从URI模式中删除当前目录路径(因此RewriteRule前斜杠)。

经过破解,终于找到了答案。

这似乎是重写的第一部分。与我没有意识到的第一部分和第二部分有所不同,即使用重写时 URL 会"重置"。

通过为您提供现在重新制作的示例,可以更轻松地解释这一点。

源语言:

RewriteRule ^htaccessTest/test.php$ /htaccessTest/phpinfo.php$ [L,NC]

新增功能:

RewriteRule ^test.php /htaccessTest/phpinfo.php

如您所见,第一部分引用了htaccessTest。您不需要此部分,因为 url "已经"在此文件结构中。您的网址是:"localhost/htaccessTest/test.php"

第二部分大致相同,我只是删除了正则表达式的东西和 [L,NC]。[L,NC]稍后可能会派上用场,但为了简单起见,我删除了它。

结果是这样的:

ErrorDocument 404 /htaccessTest/errors/404_message.php
RewriteEngine On 
RewriteRule ^test.php /htaccessTest/phpinfo.php

谢谢你们的帮助!(尤其是@anubhava)

最新更新