【发布时间】:2011-04-28 21:29:42
【问题描述】:
我有一个之前的问题得到了很好的回答,但需要修改,我无法回答,所以创建了一个新问题。
我需要一个 mod_rewrite 来完成以下操作:
www.example.com?page=var1&cat=var2&subcat=var3&subsubcat=var4
进入这个:
www.example.com/var1/var2/var3/var4/
但这也涵盖了 var2、var3 和 var4 的可选使用,因此如果这些变量为空,它仍然可以工作。
这个问题得到了很好的回答,但它需要修改才能使用 var2、var3 和 var4 的不同字段选项。
我的代码是:
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]
这可行,但我需要它能够做出 if-or-else 来选择哪个字段用于哪个变量并分辨出区别。
例如,如果我们正常有以下两个字符串,就很容易区分什么字段对应什么变量:
www.example.com?page=var1&cat=var2&subcat=var3&subsubcat=var4
www.example.com?othervar1=var1&othervar2=var2&othervar3=var3&othervar4=var4
但是对于这个字符串,它需要能够区分变量是针对哪个字段的:
www.example.com/var1/var2/var3/var4/
我需要 mod_rewrite 来选择使用哪个。
除此之外,当我实际转到确实存在的文件夹时,它确实可以正常工作。例如,如果我转到一个名为“test”的文件夹,它是一个实际的文件夹:
www.example.com/test/
它将它用作“页面”字段的变量。如果我使用以下没有结束正斜杠:
www.example.com/test
它将以下内容输出到 URL:
www.example.com/test/?page=test
我需要它来处理正常存在的文件夹。
请有人告诉我如何做到这一点?对于解决此问题的任何帮助,我将不胜感激。
另外,谁能告诉我开头的“-MultiViews”位是什么意思,因为我以前没有遇到过这个?
谢谢。
【问题讨论】:
-
如果您希望能够省略
cat但仍然有两个subcats,则需要一个类似www.example.com/value1/cat/value2/subcat/value3/subcat/value4/的 URL 结构。与其他变量类似。还是我错过了什么?
标签: regex apache .htaccess mod-rewrite clean-urls