我如何为URL编写正则表达式

时间:2013-03-23 20:48:32

标签: regex apache .htaccess mod-rewrite

我将使用正则表达式来获取我网址的某些部分。

我有这两个网址。

http://site/post/post-link

http://site/post/post-link/

我可以使用以下代码从第一个网址获取post-link

RewriteRule ^post/(.*)$ index.php?title=$1 [L,QSA,NC]

但是上面的代码在第二个网址中遇到/问题,无法正常工作。

所以,我倾向于介意,问:

1.如何使用我的代码解决该问题

2.想知道编写比我更好的代码吗

1 个答案:

答案 0 :(得分:3)

(.*)被称为贪婪匹配,您将匹配所有内容直到字符串$的末尾。使用(.*?)使其变得非贪婪之后,将/?添加到/中,该() $1抓取到{{1} }}:

RewriteRule ^post/(.*?)/?$ index.php?title=$1 [L,QSA,NC]

请注意,由于.*匹配或更多任何字符,因此您的规则也会匹配/post/,之后没有标题。如果不应该这样,并且不应将空标题发送到index.php。,请使用(.+?)要求至少一个字符而不是(.*?)。< / p>

更好的方法是使用([^/]+)来匹配所有内容,但不包括下一个/

RewriteRule ^post/([^/]+)/?$ index.php?title=$1 [L,QSA,NC]