我已经创建了一个 .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)