我有 index.php,里面只有一行
<?php echo $_GET['a']; ?>
而且我还有一个.htaccess,里面只有两行
RewriteEngine on
RewriteRule ^([a-z]+)$ ?a=$1
为什么当我输入时/ab.cd出现 404 错误,但如果我输入/abcd.它并没有给我一个 404 错误和 PHP 回abcd显(没有 url 末尾的点)。
谁能告诉我为什么我的重写规则允许abcd.通过而不是给我一个 404 错误?
编辑:
我刚刚在我的开发环境中测试了您的 Rewriterule(独立)并且它有效。它不允许/abcd.通过我的 - 它给了我一个 404 错误,所以你的环境中一定有什么东西影响了你的规则。
-初始后-
看起来您的句点(。)/ab.cd没有在 Rewriterule 中定义 - 只是小写的 az 字符。
利用:
RewriteEngine on
RewriteRule ^([a-z.]+)$ ?a=$1
^
您使用的正则表达式([a-z]+)仅匹配小写字母“a”到“z”。它永远不会匹配一系列字母后跟一个句点,然后是一系列字母,就像您尝试使用ab.cd.
如果您还想匹配句点,则需要([a-z.]+).
我刚刚在我的服务器上重建了情况,我得到了所需的 404 错误。我只将[L]标志添加到 RewriteRule。
.htaccess
RewriteEngine on
RewriteRule ^([a-z]+)$ test.php?a=$1 [L]
测试.php
<?php echo $_GET['a']; ?>
是否有任何其他重写规则可能会干扰您的请求?即使在其他包含的文件中?在这种情况下,L 标志可能会对您有所帮助。