mod重写时出现奇怪的错误



我的mod_rewrite出现了一个奇怪的错误。

这是我的htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?a=$1 
RewriteRule ^(.*)/(.*)$ index.php?a=$1&b=$2
RewriteRule ^(.*)/(.*)/(.*)$ index.php?a=$1&b=$2&c=$3

当我在地址栏输入:

localhost/test/1/2

在我的index.php文件中我有:

echo '<pre>';
print_r($_GET);
echo '</pre>';

我应该看到的是:

Array
(
    [a] => test
    [b] => 1
    [c] => 2
)

但是我得到的结果是:

Array
(
    [a] => index.php
    [b] => 1
    [c] => 2
)

我做错了什么?

If-Then-Else逻辑,互斥(和最终)规则

有几个问题。

  • In mod-rewrite,一组条件只适用于一条规则。但是在这里,你试图将它们应用于多个规则。
  • 您的规则不是互斥的。.*匹配所有字符,因此它可以匹配所有三种模式。我们需要更具体的规则。
  • 你的规则不是最终的(需要L标志)。

试试这个:

RewriteEngine On
# IF: Does the file or folder exist?
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
# THEN leave unchanged, skip 3 rules
RewriteRule ^ - [L,S=3]
# ELSE (the file or folder does not exist)
RewriteRule ^([^/]+)/?$ index.php?a=$1 [L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?a=$1&b=$2 [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?a=$1&b=$2&c=$3 [L]
# FINALLY: leave unchanged
RewriteRule ^ - [L]

最新更新