我有index.php,其中只有一行
<?php echo $_GET['a']; ?>
而且我还有一个只有两行的.htaccess
RewriteEngine on
RewriteRule ^([a-z]+)$ ?a=$1
为什么当我输入/ab.cd
时出现404错误,但是如果我输入/abcd.
它就不会给我404错误和PHP回声abcd
(没有点上的网址结束。)
有人可以告诉我为什么我的重写规则允许abcd.
通过而不是给我404错误吗?
答案 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标志可能会对您有所帮助。