1

虽然我已经看过一些关于这个主题的帖子,但我仍然遇到一些问题来实现我想要的。我的旧网址是这样的:

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 以何种方式影响以及为什么我会得到这个无限循环。谢谢!

4

1 回答 1

2

你不需要 N 标志。用连字符递归替换下划线以下代码将起作用:

RewriteRule ^([^_]+)_(.+?\.htm)$ $1-$2 [L,NC,E=underscores:Yes]

RewriteCond %{ENV:REDIRECT_underscores} ^Yes$
RewriteRule ^([^_]+)$ /$1 [R=301,L]
于 2013-07-19T11:09:10.460 回答