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

时间:2014-01-16 16:45:50

标签: php apache .htaccess mod-rewrite

我创建了一个.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]

我使用url访问它:

  

本地主机/ htaccessTest / test.php的

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

由于

2 个答案:

答案 0 :(得分:3)

尝试不带前导斜线的规则:

ErrorDocument 404 /htaccessTest/errors/404_message.php

RewriteEngine On
RewriteRule ^htaccessTest/index\.php$ /htaccessTest/phpinfo.php [L,NC]
  • 最好使用行开始/结束锚点以避免匹配URI中的意外文本。
  • dot需要在正则表达式中转义,否则匹配任何字符。
  • .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)