我创建了一个.htaccess文件,可以让服务器为我提供自定义404页面。但是,当我尝试重写时,它不起作用 htaccess文件位于根目录中。
RewriteEngine On
RewriteRule /htaccessTest/index.php /htaccessTest/phpinfo.php
ErrorDocument 404 /htaccessTest/errors/404_message.php
我不确定为什么这不起作用。我检查了phpinfo,在Apache2下,它声明已经加载了mod_rewrite
我真的很难过。
不确定发生了什么!
任何帮助都会很棒!
根据下面突出显示的内容,我发现它仍然无效!我做了一些更改,现在我得到的是404错误消息,除非我导航到索引页面。 以下是更改:
ErrorDocument 404 /htaccessTest/errors/404_message.php
RewriteEngine On
RewriteRule ^htaccessTest/test\.php$ /htaccessTest/phpinfo\.php$ [L,NC]
我使用url访问它:
本地主机/ htaccessTest / test.php的
(忽略缺少http://,我已删除,因此它不认为它是一个链接)。
还有什么想法?
由于
答案 0 :(得分:3)
尝试不带前导斜线的规则:
ErrorDocument 404 /htaccessTest/errors/404_message.php
RewriteEngine On
RewriteRule ^htaccessTest/index\.php$ /htaccessTest/phpinfo.php [L,NC]
.htaccess
是每个目录指令,Apache从RewriteRule
URI模式中剥离当前目录路径(从而导致斜杠)。答案 1 :(得分:0)
最后在用它进行黑客攻击后找到答案。
这似乎是Rewrite的第一部分。 我没有意识到第一和第二部分存在差异,这就是使用重写时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)