使用正则表达式重写Url无效


Url rewrite with regular expression not working

我的/etc/apache2/apache2.conf文件中有这个RewriteRule代码。

<Directory /var/www/html/demo/>
    # New URL Structure
    RewriteEngine On
    Allow From All
    RewriteBase /
    RewriteRule "^page/(([A-Za-z0-9'-]+/)*[A-Za-z0-9'-]+)/(.*)$" detail.php?url=$1 [L]
</Directory>

我有这个URL:http://example.com/page/parameter-1/parameter-2和RewriteRule运行得很好,但当我尝试使用这个URL http://example.com/page/parameter-1时,它不起作用。

http://example.com/page/parameter-1 [Not working]
http://example.com/page/parameter-1/parameter-2 [Working]
http://example.com/page/parameter-1/parameter-2/parameter-3 [Working]

知道我做错了什么吗?

谢谢。

好的,让我们分解一下正则表达式匹配的内容:

^page/-你的URL必须以"page/"开头,到目前为止一切都很好。

(([A-Za-z0-9'-]+/)*-您的URL中可以有0个或多个段。

[A-Za-z0-9'-]+)/(.*)$-您的URL必须以某个段结尾,后面跟着一个斜线,后面跟着任何

最后一部分是正则表达式有点错误的地方。第一个例子的"page/"后面没有斜线。

这是因为正则表达式模式总是假设page/之后总是有一个/

您可以将其简化为:

<Directory /var/www/html/demo/>
    # New URL Structure
    RewriteEngine On
    Allow From All
    RewriteBase /
    RewriteRule ^/?page/([a-z].*)$ detail.php?url=$1 [L,QSA,NC]
</Directory>