用URL中的破折号替换下划线(Apache)

时间:2014-04-13 15:37:44

标签: regex apache .htaccess

  

编辑:哎呀,答案就在我的鼻子底下。解决方案是首先更换下划线。我只是将这些规则放在上面   小写规则,现在似乎工作正常。

我想将我的网址更改为小写,并用短划线替换下划线。因此,如果访问者到达mysite / World / New_York,则URL将默认为mysite / world / new-york。

我通过修改我的httpd.conf文件并将其添加到我的.htaccess文件来处理小写...

RewriteRule ^(.*?[A-Z].*) /${tolower:$1} [R]

然后我添加了以下规则,用破折号替换下划线:

RewriteRule ^([^_\ ]*)[_\ ](.*?[_\ ].*) $1-$2 [N]
RewriteRule ^([^_\ ]*)[_\ ]([^_\ ]*) /$1-$2 [L,R=301]

我本可以发誓它工作正常,但现在不能正常工作。

这很好用 - mysite / World / New-York;它正确默认为mysite / world / new-york

但是带有下划线的URL只有在它们是小写的情况下才有效;这个mysite / world / new_york默认为new-york。

然而,大写字母和下划线的组合是另一个故事。 URL / world / New_York默认为mysite / mysite / world / new-york

如果我也将部分名称 - mysite / World / New_York大写 - 页面就会死掉(我的浏览器只是说“没有收到数据”)。

我也试过这些变化而没有成功......

RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]

这就是我的章节规则......

RewriteRule ^World/([a-zA-Z0-9()_/-]+)/?$ World/index.php?area=$1 [L]

任何想法如何解决这个问题?

0 个答案:

没有答案