2014-06-18 33 views
0

這裏是我當前htaccess文件:的.htaccess多重寫規則/優先處理

RewriteEngine On 

RewriteCond %{HTTP_HOST} !^www\.website\.com [NC] 
RewriteCond %{HTTP_HOST} ([^.]+)\.website\.com [NC] 
RewriteRule ^(.*)$ http://www.website.com/gotourl.php?urlid=?%1 [L] 
RewriteRule ^(\w+)$ ./gotourl.php?urlid=$1 [NC,L]  
RewriteRule ^(\w+)/$ ./gotourl.php?urlid=$1 [NC,L] 

有問題的網站是一個縮短網址我正在測試/開發和個人使用。上面的代碼可能並不理想,因爲我不熟悉.htaccess,並通過Google搜索和測試進行了設置。這就是我想要的URL縮短方面:

http://website.com/1234 -> http://website.com/gotourl.php?urlid=1234 
http://website.com/1234/ -> http://website.com/gotourl.php?urlid=1234 

問題是我無法弄清楚如何讓它忽略某些目錄。我想具體的目錄去特定的網頁:

http://website.com/img (or) http://website.com/img/ -> http://website.com/img.php 
http://website.com/img/1234 (or) http://website.com/img/1234/ -> http://website.com/viewimage.php?imgid=1234 

主要的問題是我不知道如何正確地做到這一點,方式我已經試過這樣做將永遠改寫爲:

http://website.com/gotourl.php?urlid=XXXX 

或最終在一個無限循環的重定向,而不是去我想要的特定頁面。任何幫助表示讚賞。

從本質上說,我尋求幫助寫我的htaccess做到以下幾點:

URL user visits -> URL user sees 
http://website.com/img -> http://website.com/img.php 
http://website.com/img/XXXX -> http://website.com/viewimage.php?imgid=XXXX 
http://website.com/XXXX -> http://website.com/gotourl.php?urlid=XXXX 

的所有路徑應該有或沒有結尾的斜線工作。

尋求幫助讓它做到這一點,也許有點解釋每一行的實際意義,所以我可以從中學習。

+0

只是一個供參考,'http:// website.com/img'不是子域。子域url的示例:'http:// test.website.com/img'。 'test'是子域。 'img'是路徑。即使'www'技術上也是一個網站的子域名。 –

+0

@JonathanKuhn - Duh。我也知道:P對不起。現在編輯擺脫所有這些子域名。我的意思是目錄:P – Jetteh22

+0

您可能只需使用如下條件:'RewriteCond%{REQUEST_FILENAME} .php -f'來檢查請求的路徑是否存在,然後重寫到該文件。 –

回答

0

你想改變的主要事情是讓你的規則更具體。縮短的網址可能不包含斜線或圓點,因此您可以將縮短網址的網址更改爲:RewriteRule ^([^/\.]+)/?$ gotourl.php?urlid=$1 [NC,L]。你需要防止'gotourl.php'匹配。單獨img的規則更具體,應該先做。 img/something的規則有點不太具體,可以在任何地方。

RewriteEngine On 

RewriteRule ^img/?$ img.php [L] 
RewriteRule ^img/([^/]+)/?$ viewimage.php?imgid=$1 [L] 
RewriteCond %{HTTP_HOST} !^www\.website\.com [NC] 
RewriteCond %{HTTP_HOST} ([^.]+)\.website\.com [NC] 
RewriteRule ^(.*)$ http://www.website.com/gotourl.php?urlid=%1 [L] 
RewriteRule ^([^/\.]+)/?$ gotourl.php?urlid=$1 [NC,L] 
+0

這適用於URL縮短和/ img/XXXX,但它不適用於常規/ IMG /。這仍然試圖從gotourl.php拉?urlid = img,它給出了一個錯誤,因爲短URL img不存在。 – Jetteh22

+0

您是否複製了上述代碼(即:您是否具有相同順序的規則)? – Sumurai8

+0

是的 - 複製和粘貼,不改變任何東西,除了'網站'到正確的域名。 – Jetteh22