【问题标题】:Need to convert %20 to - using .htaccess需要将 %20 转换为 - 使用 .htaccess
【发布时间】:2013-07-24 22:01:30
【问题描述】:
# 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 文件顶部使用了以下 sn-p 代码,但它不起作用。我还尝试了 stackoverflow 中的其他 sn-ps,但它们也没有工作。我哪里错了?似乎为其他人工作,但不是我:)

我需要这个的原因是因为我提交给 GET 的表单总是将空格转换为 %20..

【问题讨论】:

    标签: .htaccess


    【解决方案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]
    

    【讨论】:

    • 不,只是尝试了这两种方法,但都没有奏效。一些奇怪的事情正在发生。我几乎在 .htaccess 的顶部尝试了这样的事情,结果相同。真的很奇怪。
    • 您确定启用了 mod_rewrite 吗?你确定重写引擎打开了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多