Apache重写下划线为连字符,除非前面有正斜杠

时间:2013-11-14 16:49:42

标签: regex apache .htaccess mod-rewrite rewrite

我正在尝试使用正确的RewriteRule或RewriteCond将下划线更改为连字符,除非下划线前面有正斜杠。我有以下规则,将所有下划线更改为连字符,无论其前面是什么:

RewriteRule ^([^_]*)_+(.*)$ $1-$2 [E=underscores:Yes,N]

RewriteCond %{ENV:underscores} ^Yes$
RewriteRule (.*) http://%{HTTP_HOST}/$1 [R=301,L]

我需要修改哪些内容以防止'/ _'更改为'/ - '?

示例:

http://host/_test_location/_test_page变为 http://host/_test-location/_test-page不是 http://host/-test-location/-test-page

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

尝试将第一个正则表达式中的*更改为+

RewriteCond %{REQUEST_URI} ^(.*)/([^/_]+)_+(.*)$
RewriteRule ^ %1/%2-%3 [E=underscores:Yes,N]

+表示必须至少匹配一个。所以sting _test_之前没有任何非“_”字符,所以不匹配。

答案 1 :(得分:0)

尝试这个略微修改的规则:

RewriteRule ^(.*?[^/])_+(.*)$ $1-$2 [E=underscores:Yes,N]

RewriteCond %{ENV:underscores} ^Yes$
RewriteRule ^(.+)$ /$1 [R=302,L]