2016-05-07 23 views
0

我在我的/etc/apache2/apache2.conf文件中有这个RewriteRule代码。Url用正则表达式重写不起作用

<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和规则被工作完美,但是当我尝试用这个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] 

任何想法我做错了什么?

谢谢。

回答

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> 
+0

什么如果我不想让第一个参数的数字。不想允许1245:'http:// example.com/page/1245/parameter-1'并允许:'http:// example.com/page/parameter-1/parameter-2' –

+0

在这种情况下,使用:''RewriteRule^/?page /([a-zA-Z] + - \ d +。*)$ detail.php?url = $ 1 [L,QSA,NC]' – anubhava

+0

我试过'RewriteRule“^ /? page /([a-zA-Z] + - \ d +。*)$“detail.php?url = $ 1 [L,QSA,NC]'但这个网址不起作用 'http://example.com/page/parameter-1 OR http://example.com/page/parameter-1/parameter-2 OR http:// example.com/page/parameter-1/parameter-2/parameter-3' –

1

好吧,让我们打破你的正则表达式匹配:

^page/ - 你的URL必须以 “页/”,都好到目前为止开始。

(([A-Za-z0-9\-]+/)* - 您的网址可以包含0个或更多网段。

[A-Za-z0-9\-]+)/(.*)$ - 你的URL必须与一些段结束,然后是斜线,跟任何

这最后一部分是在正则表达式去有点不对劲。你的第一个例子在“page /”之后没有斜线。