我的网址中有空格我需要使用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]
但它不起作用。想法?
感谢大家的投入。
丹尼斯
答案 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]