需要检查一系列空格并将其转换为htaccess中的破折号。 有一些不同的坏网址,我正在重定向,目前它们工作正常,如果标签是一个单词...如果有一个空格404它与/ word1%20word2应该是/word1-word2.
现在......那说 - 并不总是只有一个空间......有时会有2个,但就我在G.webmaster工具冲突中看到的情况而言可能达到6个。
我当前的重写适用于下面的网址序列。
RewriteRule ^.+\(offset\)/+.*?/\(tag\)/([^.]+)$ /tag/$1 [R=301,L]
适用于:www.domain.com/index.php/Blog/(offset)/ 48 /(tag)/ word1
适用于:www.domain.com/Blog/(偏移)/ 328 /(标签)/ word1
适用于:www.domain.com/Tags/(偏移)/ 24 /(标签)/ word1
不起作用:www.domain.com/index.php/Blog/(offset)/ 48 /(tag)/ word1%20word2%20word3
不起作用:www.domain.com/Blog/(offset)/ 328 /(tag)/ word1%20word2
不适用于:www.domain.com/Tags/(offset)/24/(tag)/word1%20word2
SOO ......我在试图弄清楚如何捕捉一组未知空间并用破折号替换它们。 HALP!
答案 0 :(得分:0)
我不太确定是否可以匹配未知数量的空格并替换然后只使用mod_rewrite。
所以一个解决方案是将内部重定向(没有R
)转换为简单的PHP,将空格分隔的值作为参数传递给PHP脚本,在PHP代码中进行必要的替换,然后让PHP发送外部重定向到更正的URL(通过设置标题位置:/ new-url),类似的方法被描述为here。
如果您正在寻找纯粹的.htaccess / mod_rewrite解决方案,那么您可以从这开始:
RewriteRule ^temprewrite/([\S]+)$ /tag/$1 [R=301,L]
RewriteRule ^temprewrite/(.*?)\s(.*) /temprewrite/$1-$2
RewriteRule ^.+\(offset\)/\d+/\(tag\)/(.*) /temprewrite/$1
[\S]+
匹配的空格,则第一条规则会执行最终重定向。\s
分隔的两个部分,用-
连接部分并将结果传递回重写引擎,其中第一个或第一个第二条规则将再次匹配。请注意,此“代码”未经过全面测试,可能会遗漏一些罕见的情况和/或导致多次内部重写,但我认为它“运行良好”可以试一试。
答案 1 :(得分:0)
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]
我原来的规则之后就有了这个规则,它似乎工作得很好。希望这有助于任何人解决问题。 :)