我的RewriteRule
文件中有/etc/apache2/apache2.conf
代码。
<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]
知道我做错了吗?
感谢。
答案 0 :(得分:1)
这是因为你的正则表达式模式总是假设/
之后始终存在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>
答案 1 :(得分:1)
好的,让我们分解你的正则表达式匹配:
^page/
- 您的网址必须以&#34; page /&#34;开头,到目前为止还不错。
(([A-Za-z0-9\-]+/)*
- 您的网址中可以包含0个或多个细分。
[A-Za-z0-9\-]+)/(.*)$
- 您的网址必须以某个细分受众群结尾,然后是斜杠,后跟任何内容
最后一部分是正则表达式有点错误的地方。您的第一个示例在&#34; page /&#34;。
之后没有斜杠