Url使用正则表达式重写不起作用

时间:2016-05-07 11:10:12

标签: php linux apache .htaccess mod-rewrite

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

知道我做错了吗?

感谢。

2 个答案:

答案 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;。

之后没有斜杠