我的/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>