虽然我已经看到关于这个主题的帖子很少,但我仍然遇到一些问题要实现我的目标。 我的旧网址就像:
http://myhostname.com/offer/1234_Nice_Offer_Cool_Whatever_HEllyeah.htm
显然我想把它们重写为:
http://myhostname.com/offer/1234-nice-offer-cool-whatever-hellyeah.htm
这是我在.htaccess中尝试过的代码。这可以很好地替换URL中的下划线,它们没有任何目录:
RewriteCond %{REQUEST_URI} \.htm$ [NC]
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [E=underscores:Yes,N]
RewriteCond %{ENV:underscores} ^Yes$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
因此,这一系列规则适用于URL,如:
http://myhostname.com/1234_Some_Section_hellyeah.htm
但是当我尝试使用相同的URL代码时:
http://myhostname.com/dir1/dir2/dir3/1234_Some_Offer_Or_Section.htm
然后,服务器进行无限循环(我的[N]标志...) 基本上,我想知道以哪种方式影响这些规则的每个目录URL以及为什么我得到这个无限循环。谢谢!
答案 0 :(得分:2)
你不需要N旗。要在代码后递归替换连字符下划线将起作用:
RewriteRule ^([^_]+)_(.+?\.htm)$ $1-$2 [L,NC,E=underscores:Yes]
RewriteCond %{ENV:REDIRECT_underscores} ^Yes$
RewriteRule ^([^_]+)$ /$1 [R=301,L]