1

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

我有这两个网址。

http://site/post/post-link

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

我可以使用下面的代码post-link从第一个 URL 获取。

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

但上面的代码/在第二个 URL 中存在问题,无法正常工作。

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

1.我如何用我的代码解决这个问题

2.你有什么想法写出比我更好的代码吗

4

1 回答 1

3

(.*)被称为贪婪匹配,您匹配所有内容直到字符串的末尾$(.*?) 使用After it使其不贪婪,添加/?一个可选匹配的/,它不是()从into捕获的$1

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

请注意,由于.*匹配个或多个任意字符,您的规则也将匹配/post/其后没有标题。如果不应该发生这种情况,并且不应将空标题发送到index.php.,请使用(.+?)要求至少一个字符而不是(.*?).

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

RewriteRule ^post/([^/]+)/?$ index.php?title=$1 [L,QSA,NC]
于 2013-03-23T20:50:46.990 回答