3

我有 index.php,里面只有一行

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

而且我还有一个.htaccess,里面只有两行

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

为什么当我输入时/ab.cd出现 404 错误,但如果我输入/abcd.它并没有给我一个 404 错误和 PHP 回abcd显(没有 url 末尾的点)。

谁能告诉我为什么我的重写规则允许abcd.通过而不是给我一个 404 错误?

4

3 回答 3

0

编辑:

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

-初始后-

看起来您的句点(。)/ab.cd没有在 Rewriterule 中定义 - 只是小写的 az 字符。

利用:

RewriteEngine on
RewriteRule ^([a-z.]+)$ ?a=$1
                  ^
于 2012-11-08T14:27:14.647 回答
0

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

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

于 2012-11-08T14:27:15.023 回答
0

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

.htaccess

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

测试.php

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

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

于 2012-11-08T15:41:19.990 回答