2016-11-21 97 views
1

我有以下.htaccess文件:保持URL編碼的.htaccess重寫後

RewriteEngine On 

# Rewrite www. 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

假設我的域名是foo.com。如果我打開http://foo.com/something,它將被重定向到http://www.foo.com/something。這很適用,除非something包含任何url encoded字符。

如果我打開http://www.foo.com/bar/file-with-%3F-in-nameREQUEST_URI/bar/file-with-%3F-in-name

如果我打開http://foo.com/bar/file-with-%3F-in-name,然而,URL編碼%3F被改寫期間解碼爲?,並且REQUEST_URI成爲/bar/file-with-QUERY_STRING-in-name

如何在重寫期間保持url編碼字符不被解碼?

我試過使用BNE標誌,但沒有運氣。

回答

1

這裏是規則的版本,這將解決您的問題:

# Rewrite www. 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteCond %{THE_REQUEST} \s/+(\S*)\sHTTP 
RewriteRule^http://www.%{HTTP_HOST}/%1 [L,R=301,NE] 
  • 策略是從THE_REQUEST變量搶請求URI,然後纔會慢慢被Apache解碼。
  • NE仍然需要避免%3F成爲%253F

這是我的錯誤較早,我沒有正確地解釋問題。