非常简单的RewriteRule不起作用

时间:2012-11-08 14:23:44

标签: php .htaccess get

我有index.php,其中只有一行

<?php echo $_GET['a']; ?>

而且我还有一个只有两行的.htaccess

RewriteEngine on
RewriteRule ^([a-z]+)$ ?a=$1

为什么当我输入/ab.cd时出现404错误,但是如果我输入/abcd.它就不会给我404错误和PHP回声abcd(没有点上的网址结束。)

有人可以告诉我为什么我的重写规则允许abcd.通过而不是给我404错误吗?

3 个答案:

答案 0 :(得分:0)

修改

我刚刚在我的开发环境中测试了你的Rewriterule(独立)并且它可以运行。它不允许我/abcd.通过它 - 它给我一个404错误,所以你的环境中必定有某些东西会影响你的规则。

-initial post -

看起来/ab.cd中的句点(。)未在重写中定义 - 只是小写的a-z字符。

使用:

RewriteEngine on
RewriteRule ^([a-z.]+)$ ?a=$1
                  ^

答案 1 :(得分:0)

您使用的正则表达式([a-z]+)仅匹配小写字母“a”到“z”。它永远不会匹配一系列字母后面跟着一系列字母后跟一系列字母,就像您尝试使用ab.cd一样。

如果您还想匹配句点,则需要([a-z.]+)

答案 2 :(得分:0)

我刚刚在我的服务器上重建了这种情况,我得到了所需的404错误。我只将[L]标志添加到RewriteRule。

的.htaccess

RewriteEngine on
RewriteRule ^([a-z]+)$ test.php?a=$1 [L]

test.php的

<?php echo $_GET['a']; ?>

是否有任何其他重写规则可能会干扰您的请求?即使在包含的其他文件中?在这种情况下,L标志可能会对您有所帮助。