2017-11-03 194 views
0

在我的htaccess中,我爲我的搜索頁面重寫規則以創建乾淨的URL;RewriteRule阻止編碼

原始地址:

http://www.example.com/index.php?keyword=apple 

重寫規則:

RewriteRule ^keyword/([A-Za-z0-9-]+)/?$ index.php?keyword=$1 

清潔網址:

http://www.example.com/keyword/apple 

,除非我輸入外文字符完美的作品。例如,如果我寫

http://www.example.com/keyword/değişmek 

我得到了404.這是有道理的,因爲字母Â和ş是外來字母。他們必須被編碼。但如果我在原始URL中輸入關鍵字,

http://www.example.com/index.php?keyword=değişmek 

它的工作原理。我得到了結果。此外,我試圖編碼輸入搜索用戶輸入搜索乾淨的URL

var url = encodeURIComponent($("#search-input").val()); 
window.location.href = "http://www.example.com/keyword/"+ url ; 
console.log(url); 

沒有工作。我得到了404。我檢查了console.log,並且用戶輸入被編碼了。因此,我認爲重寫導致編碼問題。所以我試圖添加一些與編碼相關的標誌。

RewriteRule ^keyword/([A-Za-z0-9-]+)/?$ index.php?keyword=$1 [NE] 
RewriteRule ^keyword/([A-Za-z0-9-]+)/?$ index.php?keyword=$1 [B] 
RewriteRule ^keyword/([A-Za-z0-9-]+)/?$ index.php?keyword=$1 [NE,B] 

沒有工作。任何建議?

回答

1

,因爲你使用([A-Za-z0-9-]+)定義只alphanumeric characters它不工作,

嘗試使用([^/]+),而不是如果你想允許的一切

或使用([\p{L}0-9]+)只允許Unicode的字母和數字,

但它不會允許特殊標記,如%&*()#[email protected]