用破折号替换所有正斜杠

5

Apache 的哪个版本? - hjpotter92
http://stackoverflow.com/questions/28849327/removing-whitespaces-or-20-in-url-using-htaccess - CBroe
@CBroe 对正斜杠无效。 - ank
@ank:这是一个非常出色的问题描述。 - CBroe
@CBroe,您提供的解决方案,在修改为正斜杠后会导致无限循环。 - ank
1个回答

5

You can use these 2 rules in your root .htaccess:

RewriteEngine On
RewriteBase /

RewriteRule ^([^/]+)/([^/]+)/?$ $1-$2 [NE,L,R=302]

RewriteRule ^([^/]+)/(.+)$ $1-$2

这将把 example.com/foo/bar/baz/abc/xyz/123 重定向到 example.com/foo-bar-baz-abc-xyz-123


这个完美地运作了 - 你能解释一下吗,也就是为什么需要这两个步骤? - ank
1
是的,当且仅当要替换的斜杠只有一个时,第一条规则才会执行,因此将被跳过直到最后一个 /。第二条规则将一直执行多次,每次将每个 / 替换为 -,直到只剩下一个 / - anubhava
1
不需要使用 N 进行循环,这是默认的 Apache 行为。只要当前 URI 存在匹配规则,该规则就会被执行。 - anubhava
1
在这里,顺序很重要。一旦只剩下一个斜杠,就应该进行重定向。 - anubhava
1
对我来说可以。如果你想让example.com/directory/foo/bar/baz/abc/xyz/123指向example.com/directory/foo-bar-baz-abc-xyz-123,只需执行RewriteRule ^([^/]+)/([^/]+)/?$ /directory/$1-$2 [NE,L,R=301]。RewriteRule ^([^/]+)/(.+)$ /directory/$1-$2是我的设置方式,它也可以工作。使用301而不是302应该会永久重定向搜索引擎到新的URL。 - Michael d
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接