Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache mod_重写和2个参数出现问题_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache mod_重写和2个参数出现问题

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

我想使用网站上的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|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,并且可以很好地使用这两个规则。