2017-10-09 96 views
0

我有两个规则:的.htaccess重定向国防部重写

RewriteRule ^novina\.php\?sid=([0-9]+)&cat=([a-zA-Z]+)$ novina/$2/$1.html [L,R=301,NC] 

RewriteRule ^novina/([a-zA-Z]+)/([0-9]+).html novina.php?sid=$2&cat=$1 [L,NC] 

我想首先重定向所有旧的查询,包括网址,以更好看的文件夹结构。使用第二条规则,我得到给定url的结果。

第二个规则工作正常,但第一个不会重定向url。我的错误在哪里?

回答

1

RewriteRule与查询字符串不匹配。

你必须使用具有的RewriteCond%{QUERY_STRING}

RewriteCond %{QUERY_STRING} sid=([0-9]+)&cat=([a-zA-Z]+) 
RewriteRule novina\.php novina/%2/%1.html? [L,R=301,NC] 

你看,你用%n的重写规则,而不是$ N

您需要一个带问号的后缀目的地。

The?在目的地末端(目的地不是正则表达式)意味着不用查询字符串就可以到达目的地。

Question mark in the end of RewriteRule

+0

感谢,它会将所有的权利,但现在我得到/novina/category/118943.html?sid=118943&cat=类别。查询字符串仍然存在,它会创建一个循环:ERR_TOO_MANY_REDIRECTS – user1542894

+0

我已经纠正它 - RewriteRule^novina \ .php $ /novina_new/%2/%1.html? [L,R = 301,NC]必须有?最后。 – user1542894

+0

是的,你需要它。我编辑了答案。谢谢。 – DotMG

1

你可以有你的规则是:

Options -MultiViews 
RewriteEngine On 

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

RewriteRule ^novina/([a-zA-Z]+)/([0-9]+).html novina.php?sid=$2&cat=$1 [L,QSA,NC]