我将使用正则表达式来获取我网址的某些部分。
我有这两个网址。
http://site/post/post-link
http://site/post/post-link/
我可以使用以下代码从第一个网址获取post-link
。
RewriteRule ^post/(.*)$ index.php?title=$1 [L,QSA,NC]
但是上面的代码在第二个网址中遇到/
问题,无法正常工作。
所以,我倾向于介意,问:
1.如何使用我的代码解决该问题
2.想知道编写比我更好的代码吗
答案 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]