我正在尝试将我的获取变量显示为扁平链接。 想要改变这一点:
http://mydomain.com/index.php?page=shop&var1=hat&var2=10
到
http://mydomain.com/index.php/shop/hat/10
请记住,没有固定数量的变量,这就是我使用var1,var2,...等的原因
[编辑] 我已经有一个部分工作的脚本,但只适用于最多3个变量
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L]
RewriteRule ^([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2 [L]
RewriteRule ^([^/\.]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2&var2=$3 [L]
RewriteRule ^([^/\.]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2&var2=$3&var3=$4 [L]
答案 0 :(得分:2)
首先要记住mod_rewrite的工作原理如下:
http://mydomain.com/index.php/shop/hat/10
(客户端类型)被重写为
http://mydomain.com/index.php?page=shop&var1=hat&var2=10
(客户服务的内容),但不一定像后者那样显示。 (除非你把它作为重定向)
所以假设你的格式在这里完整描述:
RewriteRule ^index\.php/([^/]+)/([^/]+)/([0-9]+)$ /index.php?page=$1&var2=$2&var2=$3
应该是好的。
修改强>
哦,顺便说一句!我没有考虑变量的变量。我认为不应该由mod_rewrite处理。也许最好的镜头是RewriteRule index.php/(.*) /index.php?call=$1
,然后使用你的脚本来爆炸使用/分隔符。
只有在您已经知道变量AFAIK的数量时才能这样做。
答案 1 :(得分:0)
您可以直接将所有请求定向到index.php(称为bootstrapping),然后让脚本解析变量。
这是Zend Framework的完成方式,你应该看看它。 ZF还有许多你可以利用的好东西。
这是我的一个带有ZF驱动网站的虚拟主机的重写块。
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteRule ^.*$ index.php [NC,L]