有关mod_rewrite和2个参数的问题

时间:2014-04-19 08:38:16

标签: apache .htaccess mod-rewrite

我想在网站上使用网址www.x.com/cat/prod

首先,我想将www.x.com/cat/prod传递给www.x.com/index.php?cat=cat&prod=prod,我管理了这个:

RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !\.(js|ico|gif|jpg|png|css|html|swf)$
RewriteRule ^(.*)/(.*)/?$ index.php?cat=$1&prod=$2 [B,QSA,L]

其次我想拥有它,如果有人访问www.x.com/index.php?cat=cat&prod=pro,它应该被301重定向到www.x.com/cat/prod并且我使用了这个:

RewriteCond %{THE_REQUEST} ^GET\s/+index\.php [NC]
RewriteCond %{QUERY_STRING} (^|&|\?)cat=(.*)&prod=(.*)($) [NC]
RewriteRule . /%2/%3? [R=301,L,NC]

问题是它给了我www.x.com/cat&prod=prod而不是www.x.com/cat/prod,我尝试了很多我在这里找到的东西,但我还是不能设法做对了。

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

有这样的话:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+index\.php\?cat=([^&]+)&prod=([^&\s]+) [NC]
RewriteRule ^ /%1/%2? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !\.(js|ico|gif|jpg|png|css|html|swf)$
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?cat=$1&prod=$2 [B,QSA,L]