问题描述
|
我正在尝试将我的get变量显示为平面链接。
要更改此:
http://mydomain.com/index.PHP?page=shop&var1=hat&var2=10
至
http://mydomain.com/index.PHP/shop/hat/10
请记住,没有固定数量的变量,这就是为什么我使用var1,var2,... etc
[编辑]
我已经有部分工作的脚本,但只能使用最多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]
解决方法
因此,首先记住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变量的数量时,才可以这样做。
,您可以将所有请求直接定向到index.php(称为引导),然后让脚本解析变量。
这就是Zend Framework的工作方式,您应该看看它。采埃孚还提供其他许多您可以利用的东西。
这是我使用ZF支持的网站从其中一个虚拟主机重写的代码。
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteRule ^.*$ index.php [NC,L]