我的/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>我有这个网址:http://example.com/page/parameter-1/parameter-2和RewriteRule是完美的工作,但当我尝试这个网址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]你知道我做错了什么吗?
谢谢。
发布于 2016-05-07 19:17:23
这是因为您的正则表达式模式总是假设在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>发布于 2016-05-07 19:19:01
好的,让我们分析一下正则表达式匹配的内容:
页面-你的网址必须以“^page/ /”开头,到目前为止一切正常。
(([A-Za-z0-9\-]+/)* -您的URL可以包含0个或更多段。
[A-Za-z0-9\-]+)/(.*)$ -您的网址必须以某个段结尾,后面跟着一个斜杠,后面跟任何东西
最后一部分是regex出了点问题。您的第一个示例在"page/“之后没有斜杠。
https://stackoverflow.com/questions/37087814
复制相似问题