2016-05-07 24 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 /」之後沒有斜線。