Regex mod rewrite出现了奇怪的错误
我的修改有一个奇怪的错误 这是我的htaccess:Regex mod rewrite出现了奇怪的错误,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,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
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>';
但我得到的结果是:
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]
我做错了什么?如果是,那么是逻辑,互斥(和最终)规则 有几个问题
中,一组条件仅适用于一条规则。但在这里,您试图将它们应用于多个规则在mod rewrite
- 你们的规则不是相互排斥的。
匹配所有字符,因此它可以匹配所有三种模式。我们需要更具体的规则*
- 您的规则不是最终的(
需要标记)李>L
它只返回:Array([a]=>index.php),所以答案有帮助,还是您做了其他事情?如果问题解决了,请单击左侧的复选标记接受答案。谢谢。:)太棒了,很高兴听到它有帮助!根据SO礼仪的铁律,我也被允许:如果这个或另一个答案有帮助,你会考虑点击上面的左上方的复选标记来促进它吗?这就是声誉系统在这里的运作方式。谢谢@anubhava谢谢你,仅供参考我正在跳一支舞,这是我第一次用
SKIP
回答问题。我一直想让IF-THEN-ELSE逻辑工作一段时间,但正如您所知,总有其他问题阻止解决方案工作。:)我有一种感觉,FINALLY
行是不必要的,但我不想跳转到一个不存在的规则而冒崩溃的风险。嘿,Yooouuri,如果你有时间,你能尝试一下没有最后两行的解决方案吗(从#FINALLY:
到结尾)?为了安全起见,我把它放进去是因为mod rewrite
文档没有指定是否允许它跳到没有更多规则的地方,但我感觉它会起作用。如果你真的尝试了,请告诉我结果。谢谢!:)
Array
(
[a] => index.php
[b] => 1
[c] => 2
)
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]