我需要在我的網址來替代字符%26
爲&
和%3D
爲=
:如何重寫上使用。htaccess
http://www.example.com/dir/?sort-by=title%26listing_types%3Dcars
我想下面的重寫,但它不工作
RewriteRule ^dir/?$ ?sort-by=$1&listing-types=$2 [QSA,L]
任何幫助將受到歡迎
我需要在我的網址來替代字符%26
爲&
和%3D
爲=
:如何重寫上使用。htaccess
http://www.example.com/dir/?sort-by=title%26listing_types%3Dcars
我想下面的重寫,但它不工作
RewriteRule ^dir/?$ ?sort-by=$1&listing-types=$2 [QSA,L]
任何幫助將受到歡迎
個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
)
你爲什麼要這麼做?它可以被解碼爲'title&listing_types = cars' – anubhava
urldecode不起作用 –
'echo urldecode('title&listing_types = cars')'給我: 'title&listing_types = cars' – anubhava