Mod_rewrite扁平链接

时间:2011-04-14 08:08:20

标签: php .htaccess mod-rewrite hyperlink flat

我正在尝试将我的获取变量显示为扁平链接。 想要改变这一点:

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]

2 个答案:

答案 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]