Apache mod_重写和2个参数出现问题
我想使用网站上的URL,格式为www.x.com/cat/prod 首先,我希望将www.x.com/cat/prod传递到www.x.com/index.php?cat=cat&prod=prod,我通过以下方式进行管理:Apache mod_重写和2个参数出现问题,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我想使用网站上的URL,格式为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|g
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,我尝试了很多在这里找到的东西,但我仍然无法做到正确
任何建议都将不胜感激 让它像这样:
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]
你们两步走成一圈,这有什么意义?你为什么想要第二步?您将客户端重定向到一个干净的url(为什么?),但该请求将再次被重写。第二条规则非常有效。我认为这两个规则都是相同的,没有任何条件会弄乱upI,因为我不希望内容在/cat/prod和index.php?cat=cat&prod上都可用,所以我会将客户端重定向到一个干净的URL=prod@KailashYadav我应该具备什么条件?@Debrian您应该在htaccess或apache中添加第二条规则作为第一条规则。它总是将用户重定向到SEo友好的url,并且可以很好地使用这两个规则。