htaccess规则删除和修复URL中的空格

时间:2013-12-30 19:53:31

标签: regex .htaccess

我的网址中有空格我需要使用htaccess规则删除。

这是一个示例网址:

http://www.example.com/folder name/where/else/we-want-here/
http://www.example.com/my folder name/where/else/we-want-here/

应设置为:

http://www.example.com/foldername/where/else/we-want-here/
http://www.example.com/myfoldername/where/else/we-want-here/

然后继续处理更多规则。

这是我正在玩的规则,但它需要更通用,因为“文件夹名称”可能是“我的文件夹名称”或其他有一个或多个(或没有)空格。

RewriteRule ^([a-z0-9-_]+)\ ([a-z0-9-_]+)/(.*)/? /$1$2/$3/ [NC]

任何帮助将不胜感激 - 谢谢!

丹尼斯


## UPDATE ##  

1)它们是%20,但在URL栏中它们是空格。对不起那里的混乱。

2)这部分解决了问题 - 如果URL中有超过1个空格(%20),我无法使其工作。的 301 Redirect to replace all spaces to hyphens

3)我想我已经解决了这个问题。这有效:

RewriteRule ^washington\sdc(.*) /washingtondc$1 [NC,R=301,L] 

如何组合接受前面部分匹配的各种事物?我试过了:

RewriteRule ^(washington\sdc|atlantic\scity)(.*) /$1$2 [NC,R=301,L] 

但它不起作用。想法?

感谢大家的投入。

丹尼斯

3 个答案:

答案 0 :(得分:0)

您无法使用单一规则完成所有操作,但重写引擎会循环,因此您只需使用一条规则,但必须能够匹配额外的空格:

RewriteRule ^([a-z0-9-_]+)\ ([^/]+)/(.*)/? /$1$2/$3/ [L]

规则将循环并继续删除空格,直到不再存在。

答案 1 :(得分:0)

你可以像你已经做的那样进行空间替换

RewriteRule ^(\S+)\s+(.+)$ $1$2 [L]

此模式会查找前导非空格(\S+),然后查找一个或多个空格\s+以及之后的任何(.+)

这个解决方案的问题是,它非常昂贵。这是因为它循环直到所有空格都被删除,这可能需要几轮通过重写引擎。

答案 2 :(得分:0)

DOCUMENT_ROOT/.htaccess文件中尝试以下两条规则:

RewriteEngine On
RewriteBase /

RewriteRule "^(\S*) +(\S* .*)$" $1$2 [L]
RewriteRule "^(\S*) (\S*)$" /$1$2 [L,R=302]