2013-06-25 78 views
1

我想我與匹配模式的所有URL作爲我.htacess規則不工作

/released/2013/iron-man 
/released/2013/abc-of-death 
/released/2012/saw6 

被重定向到

/released/1.php 

可以和我的名字爲好。

我加入這個規則我.htacess文件,但它不工作

RewriteRule ^released/([0-9]+)/?$ /released/1.php?id=$1 [L] 
+0

首先,什麼服務器和Web服務器,你上運行?其次是如果您使用的是Apache,則啓用mod_rewrite? –

+0

是的,我使用的是Apache –

回答

1

尾隨的問號可選結局/這是不是你想要的相匹配。

^released/([0-9]+)/iron-man$ 
不指定特定的外部域

RewriteRule ^released/([0-9]+)/(.+)$ /released/1.php?id=$1+$2 
+1

我很確定他不希望匹配的電影名稱顯示爲'id'參數的一部分。 –

+0

我已經加入 RewriteEngine敘述上 RewriteOptions繼承 重寫規則^釋放/([0-9] +)/(。+)$ /released/1.php?id=$1+$2 ............仍然顯示「/發佈/ 2013 /鐵人在這臺服務器上沒有找到。」 –

0

RewriteRule始終在內部執行。要做到這一點重定向如您所要求在最後添加[R=301] - 或302,303或307取決於您需要哪種類型的重定向,但通常301是好的。

除此之外,您所寫的正則表達式不允許使用擴展網址 - 刪除尾隨$。在此之後,/?部分是無意義的,所以你可以刪除它。

線會閱讀:

RewriteRule ^released/([0-9]+) /released/1.php?id=$1 [L,R=301] 
1

問題是,你有第二個斜槓後$但你的電影名稱,如iron-man等第二斜線後刪除$因爲你是不匹配的。

確認mod_rewrite和的.htaccess通過httpd.conf啓用,然後把這個代碼在你.htaccessDOCUMENT_ROOT目錄:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(released)/([0-9]+)/ /$1/1.php?id=$2 [L,QSA,NC] 
+0

爲什麼在這種情況下'RewriteCond'行?對於通用重定向非常沒有意義 - 由於文件系統檢查,它將對性能產生負面影響並且毫無用處。 –

+0

@NielsKeurentjes:如果這是一個真正的目錄'/ released/100 /',那麼這個規則不應該被忽略。 – anubhava

+0

問題說*「我的所有網址」*。我只是遵循他所說的話。 –