我正在尝试进行正则表达式匹配并替换.htaccess文件,但我无法弄清楚替换位。我认为我的比赛部分是正确的,但也许有人可以提供帮助。
我有这个网址 - http://www.foo.com/MountainCommunities/Lifestyles/5/VacationHomeRentals.aspx
我正试图把它变成这个 - http://www.foo.com/mountain-lifestyle/Vacation-Home-Rentals.aspx
(MountainCommunities /生活方式)/ \ d /(。*)(C ++)
然后我想我会有一个像这样的重写规则 -
山生活方式/ $ 2 $ 3
但是我需要在这个实例中使用$ 2中的内容并重写它以在大写字母的单词之间放置破折号。现在我很难过。
答案 0 :(得分:4)
我认为你必须用两位进行...取出$ 2,在每个大写(除了第一个)之前加上 - ,然后使用只需将结果附加到http://www.foo.com/mountain-lifestyle/。 aspx最后。
答案 1 :(得分:2)
试试这个:
RewriteRule ^(([A-Z][a-z]+-)*)([A-Z][a-z]+)(([A-Z][a-z]+)+)(\.aspx)?$ /$1$3-$4 [N]
RewriteRule ^([A-Z][a-z]+-)+[A-Z][a-z]+$ /$0.aspx [R=301]
请注意,mod_rewrite使用内部计数器来检测并避免无限循环。因此,您的网址可能不会包含太多必须转换的字词(请参阅MaxRedirects
option表示Apache< 2.1和LimitInternalRecursion
directive表示Apache≥2.1)。
答案 2 :(得分:1)
我不认为用正则表达式可以用大写字母做什么......
您最好在网址中保留破折号并删除.aspx
例如:http://www.foo.com/MountainCommunities/Lifestyles/5/Vacation-Home-Rentals
这需要以下规则:
^/MountainCommunities/Lifestyles/5/([^/]+)/\?([^/]+) /mountain-lifestyle/$1.aspx?$2 [I]
这也考虑了发送到页面的任何查询字符串。
BTW:你如何在IIS中使用.htaccess?
答案 3 :(得分:1)
您可以在中间位“VacationHome”上使用正则表达式“([AZ])”,替换为正则表达式“ - $ 1” - 这将为您提供“-Vacation-Home-Rentals” - 然后您就可以砍掉第一个字符,然后将URL的第一部分粘贴在前面,将.aspx粘贴在最后。
答案 4 :(得分:1)
我认为主要的正则表达式是由其他人编写的,但是要匹配请求名称以放置破折号(假设所有文件名都有三个名字的驼峰表示法式'a'VacationHomeRentals.aspx':
RewriteRule: ^/MountainCommunities/Lifestyles/\d+/([A-Z][a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)\.aspx$ /mountain-lifestyle/$1-$2-$3.aspx
这是@Gumbo回复的限制版本,因为我没有机会测试他的递归。递归技术绝对是最好的,也是最适用于任何场景的。
答案 5 :(得分:0)
我认为我不太明白你想要做什么。你为什么不能简单地搜索:
http://www.foo.com/MountainCommunities/Lifestyles/5/VacationHomeRentals.aspx
并将其替换为:
http://www.foo.com/mountain-lifestyle/Vacation-Home-Rentals.aspx
?
或者这是你试图转变的模式的具体例子吗?