2013-07-24 59 views
0
# ENABLE REWRITE ENGINE 
RewriteEngine On 

# CONVERT \s and %20 to MINUS SIGN 
RewriteCond %{THE_REQUEST} (\s|%20) 
RewriteRule ^([^\s%20]+)(?:\s|%20)+([^\s%20]+)((?:\s|%20)+.*)$ $1-$2$3 [N,DPI] 
RewriteRule ^([^\s%20]+)(?:\s|%20)+(.*)$ /$1-$2 [L,R=301,DPI] 

我已將以下代碼段用於我的htaccess文件的頂部,但它不起作用。我也嘗試了其他從stackoverflow片段,他們也沒有工作。我哪裏錯了?似乎替別人打工,但不是我:)需要將%20轉換爲 - 使用.htaccess

原因我需要的,這是因爲我的表單提交總是得到轉化空格%20 ..

回答

1

首先:%{THE_REQUEST}總是包含空格。它的形式是GET /index.html HTTP/1.1。 url本身不會包含實際的空格,因爲這是一個url中的無效字符。它將始終以%20的形式出現。我在this question建議是這樣的:

#This will rewrite every single space in the url to a dash 
RewriteCond %{ENV:stripspaces} 1 
RewriteRule ^(.*)%20(.*)$ $1-$2 [N] 

#This will tell that when the requirements for this rule are met, 
#spaces should be rewritten. 
#You probably don't want that top happen for each url 
RewriteCond %{REQUEST_URI} %20 
RewriteRule ^(.*)$ $1 [E=stripspaces:1,E=redirect:1,N] 

RewriteCond %{ENV:redirect} 1 
RewriteRule ^(.*)$ $1 [R,E=!stripspaces,E=!redirect,QSA] 

我認爲這會爲你工作了。如果你真的想重寫每一處空間的每一個空間,你使用一個更簡單的結構:

RewriteRule ^(.*)%20(.*)$ $1-$2 [N,E=redirect:1] 

RewriteCond %{ENV:redirect} 1 
RewriteRule ^(.*)$ $1 [R,E=!redirect,QSA] 
+0

沒有試過這兩個都沒有工作。奇怪的事情正在發生。我幾乎在我的.htaccess的頂部和相同的結果嘗試過這樣的事情。真奇怪。 –

+0

你確定mod_rewrite已啓用嗎?你確定rewriteengine是開啓的嗎? – Sumurai8

+0

是的,它重定向其他網頁沒有問題:) –