2015-04-22 73 views
1

我有兩個mod_rewrite的規則,用於定義類別產品。產品顯示類別,並點擊一個產品來了一個產品頁面:mod_rewrite的,第一條規則的作品完美,第二條規則不

  1. 這工作:

http://www.example.com/ELE/electricalgoods/如果這需要的碼值「ELE」,並與重寫使用它實際上撥打/view_category.php?cat=ELE。這工作完全,使用以下的mod_rewrite:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /show_category.php?catcode=$1&page=$3 [NC] 

(這還包括進一步的 「文件夾」 在類別視圖頁面如http://www.example.com/ELE/electricalgoods/3/

  • 然而,這在我的htaccess的文件下面我想有一個類似的修改,只有這樣:
  • http://www.example.com/product/EL063/Earphones/重寫爲:/view_product.php?prodid=EL063

    我做這與該htaccess的代碼:

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^product/([^/]*)/([^/]*)$ /show_product.php?prodid=$1 [NC,L] 
    

    但不知何故,如預期,這並不工作,我想要的產品出現在與"/product/<code>/<name>/"佈局「產品/」文件夾中,然後調用/show_product.php文件。

    會發生什麼情況是view_product.php頁面的調用失敗並出現404錯誤。

    我試圖重新排列我的mod_rewrite規則,並且我也嘗試了在括號內跳轉/放置URL調用的product/段的變體。 我也嘗試將$1更改爲$2$3確認代碼的排序已更改,但似乎不起作用。

    我在做什麼錯?

    爲了清楚起見,這裏是我的全部的htaccess代碼:

    Options -Indexes 
    RewriteEngine On 
    
    RewriteCond %{HTTP_HOST} !^$ 
    RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteCond %{HTTPS}s ^on(s)| 
    RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301] 
    
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^product/([^/]*)/([^/]*)$ /show_product.php?prodid=$1 [NC,L] 
    
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /view_category.php?catcode=$1&page=$3 [NC,L] 
    

    編輯:更新的mod_rewrite代碼,問題依然存在,甚至L旗幟和規則

    回答

    1

    這是因爲它總是會匹配重新排序第一條規則([^/]*)/([^/]*)/([^/]*)。因爲這幾乎說明了3個目錄的組合。您需要更改訂單。一旦滿足規則,在最後添加L標誌以停止處理。

    Options -Indexes 
    RewriteEngine On 
    
    RewriteCond %{HTTP_HOST} !^$ 
    RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteCond %{HTTPS}s ^on(s)| 
    RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301] 
    
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^product/([^/]*)/([^/]*)/?$ /show_product.php?prodid=$1 [NC,L] 
    
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ /view_category.php?catcode=$1&page=$3 [NC,L]