我正在尝试创建一个mod_rewrite,当用户输入或显示在URL中时:
www.example.com/var1/var2/var3/var4/
输出与
相同www.example.com?page=var1&cat=var2&subcat=var3&subsubcat=var4
但如果数字变量发生变化,它仍然有效,因此变量可能是:
www.example.com/var1/
or
www.example.com/var1/var2/
or
www.example.com/var1/var2/var3/
or
www.example.com/var1/var2/var3/var4/
如果我使用以下内容,它仅适用于www.example.com/var1/var2/var3/var4/,但不适用于其他人:
Options +FollowSymLinks RewriteEngine On RewriteBase /
RewriteRule ^([^&]+)/([^&]*)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L]
如果我使用CHAINING使用以下代码,它在某种程度上可以作为链使用,但问题在于
www.example.com/var1/var2/
www.example.com/var1/var2/var3/
www.example.com/var1/var2/var3/var4/
它将VAR1输出为“/”,因此它使用以下代码忽略第一个变量:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^([^&]+)/$ /?page=$1 [C]
RewriteRule ^([^&]+)/([^&]*)/$ /?page=$1&cat=$2 [C]
RewriteRule ^([^&]+)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3 [C]
RewriteRule ^([^&]+)/([^&]*)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L]
订单总是一样的,所以这应该很容易。我该怎么办呢?
答案 0 :(得分:2)
可能我错过了一些东西,但IMO你不需要在这里链接C
标志。请考虑以下规则:
RewriteEngine on
Options +FollowSymlinks -MultiViews
RewriteCond %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/?$ /?page=$1 [L]
RewriteCond %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/([^/]*)/?$ /?page=$1&cat=$2 [L]
RewriteCond %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/([^/]*)/([^/]*)/?$ /?page=$1&cat=$2&subcat=$3 [L]
RewriteCond %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/([^/]*)/([^/]*)/([^/]*)/?$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L]
我在所有规则中添加了RewriteCond %{QUERY_STRING} !^page= [NC]
以确保存在无限循环。此外,我通过在每个规则的末尾添加?
来使尾随斜杠成为可选项。
以上所有规则在我的测试中都运行良好。