2017-07-24 19 views
1

我需要在我的網址來替代字符%26&%3D=如何重寫上使用。htaccess

http://www.example.com/dir/?sort-by=title%26listing_types%3Dcars 

我想下面的重寫,但它不工作

RewriteRule ^dir/?$ ?sort-by=$1&listing-types=$2 [QSA,L] 

任何幫助將受到歡迎

+1

你爲什麼要這麼做?它可以被解碼爲'title&listing_types = cars' – anubhava

+0

urldecode不起作用 –

+0

'echo urldecode('title&listing_types = cars')'給我: 'title&listing_types = cars' – anubhava

回答

0
RewriteRule ^dir/?$ ?sort-by=$1&listing-types=$2 [QSA,L] 

你反向引用$1$2實際上並不指什麼等等這些將永遠是(導致空的URL參數)。但是,$n反向引用指的是RewriteRule模式,它無論如何都與查詢字符串不匹配。您需要%n類型的反向引用,這些反向引用指向前面的RewriteCond指令中最後匹配的CondPattern

這也看起來應該是一個重定向,而不是內部重寫?否則,您冒着重複內容的風險。

http://www.example.com/dir/?sort-by=title%26listing_types%3Dcars 

你可以做類似下面的匹配上述網址,並更換相應的字符:

RewriteCond %{QUERY_STRING} ^(sort-by=.*)%26(listing_types)%3D(.*) 
RewriteRule ^(dir/)$ /$1?%1&%2=%3 [R,L] 

以上將暫時(302)重定向到/dir/?sort-by=<anything1>%26listing_types%3D<anything2>/dir/?sort-by=<anything1>&listing_types=<anything2>。如果這應該是永久性的,請將R更改爲R=301,但只有在確認工作正常後方可使用。

$1是反向引用到捕獲組中的RewriteRule圖案(即「DIR /」)和%1%2%3是反向引用到相應的捕獲基團在前述CondPattern以便重構請求參數。

如果特別需要這是一個內部重寫然後取出R標誌(和任選地除去所述取代斜線前綴)。


http://www.example.com/dir/?sort-by=title%26listing_types%3Dcars 

正如評論所說,你可以改爲完全在服務器端代碼處理這個問題。例如,在PHP中,你可以這樣做:

<?php 
$queryString = urldecode($_SERVER['QUERY_STRING']); 
parse_str($queryString,$urlParams); 
print_r($urlParams); 
?> 

鑑於上述請求的URL,這將輸出:

Array 
(
    [sort-by] => title 
    [listing_types] => cars 
)