2011-04-14 68 views
0

我试图显示我的获取变量作为平面链接。 想从这个改变:Mod_rewrite平面链接

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

所以首先要记住的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 

应该不错。

编辑:

哦BTW!我没有考虑可变数量的变量。我认为这不应该由mod_rewrite处理。也许最好的拍摄是RewriteRule index.php/(.*) /index.php?call=$1,然后使用你的脚本使用/分隔符来爆炸。

如果您已经知道变量AFAIK的数量,您只能这样做。

+0

感谢您的帮助。你的脚本看起来不错,看起来应该可以工作,但它给了我“未找到对象”。也许我错过了一些东西,这里是我的代码实现 RewriteEngine on RewriteRule^index \ .php /([^ /] +)/([^ /] +)/([0 -9] +)$ /index.php?page=$1&var2=$2&var2=$3 。该网站处于测试模式,不在域的根目录 – razvan 2011-04-14 09:41:31

+0

啊!我的规则只适用于你的index.php在根目录下。您是否尝试在index.php之前添加目录链接? – 2011-04-14 09:50:02

+0

这样工作就像你在第二个解决方案^(。*)?$ index.php?page = $ 1 [L] .Didn't与index.php或与目录一起工作。这对我来说已经够好了。谢谢您的帮助!! – razvan 2011-04-14 10:19:03

0

您可以直接将所有请求直接指向index.php(称为bootstrapping),并让脚本解析出变量。

这是如何完成与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]