Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex mod rewrite出现了奇怪的错误_Regex_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Regex mod rewrite出现了奇怪的错误

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

我的修改有一个奇怪的错误

这是我的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>';
但我得到的结果是:

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]