# 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的其他代码片段,但它们也没有用。我哪里错了?似乎为其他人而不是我工作:)。
我需要这个的原因是因为我提交给GET的表单总是将空格转换为%20 ..
答案 0 :(得分: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]