0

我正在尝试将我的 get 变量显示为平面链接。想从这里改变:

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]
4

2 回答 2

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 的变量数量,您只能这样做。

于 2011-04-14T09:22:34.450 回答
0

您可以将所有请求直接定向到 index.php(称为引导程序),然后让脚本解析出变量。

这就是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]
于 2011-04-14T09:57:33.197 回答