2017-10-09 97 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]