3

我正在尝试创建一个 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]

顺序总是相同的,所以这应该很容易。请问我怎样才能使这项工作?

4

1 回答 1

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]了所有规则以确保存在无限循环。?此外,我通过在每条规则的末尾添加斜杠来使斜杠可选。

以上所有规则在我的测试中都可以正常工作。

于 2011-04-24T22:20:48.077 回答