2014-11-06 99 views
-1

我有2個簡單的PHP文件:htaccess的多用途重寫規則衝突

product.php 
product-options.php 

在我的htaccess的文件我有:當我打電話

RewriteEngine On 
RewriteRule ^product$ product.php [L] 
RewriteRule ^options$ product-options.php [L] 
RewriteRule ^product-([^/]+)/?$ product.php?id=$1 [L] 
RewriteRule ^options-([^/]+)/?$ product-options.php?id=$1 [L] 

一切正常「mysite.com/product 「或」 mysite.com/product-MYID

但是,當我稱之爲」 mysite的。 com/options「或」mysite.com/option-MYID「我看到正確的url,但文件的內容是」product「/」product-MYID「!爲什麼???

PS:我需要這兩個文件是accessibile使用和不使用GET ID = ID

+0

請參閱apache日誌 – hjpotter92 2014-11-06 12:53:54

+0

這只是因爲您重定向 - >選項 - >產品選項.php ... - >產品-... - >產品。 php ... – Croises 2014-11-06 13:12:13

+0

你更容易將'product-options.php'改爲'options.php'或將'.php'文件放入文件夾 – Croises 2014-11-06 13:17:03

回答

1

或者你可以使用:

RewriteEngine On 
RewriteRule ^product$ product.php [L] 
RewriteRule ^options$ product-options.php [L] 
RewriteRule ^product-([^/\.]+)/?$ product.php?id=$1 [L] 
RewriteRule ^options-([^/\.]+)/?$ product-options.php?id=$1 [L] 

,因爲我覺得,你不使用。在您的產品-...或選項-...

1

那是因爲你的規則正在執行第2次爲正則表達式是:

^product-([^/]+)/?$ 

它匹配/product-MYID URI以及重寫的URI:product-options.php

爲了避免這種情況,你可以使用這些規則:

RewriteEngine On 

# If the request is for a valid directory or file then skip rewrite rules 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 

RewriteRule ^product/?$ product.php [L] 
RewriteRule ^options/?$ product-options.php [L] 
RewriteRule ^product-([^/]+)/?$ product.php?id=$1 [L,QSA] 
RewriteRule ^options-([^/]+)/?$ product-options.php?id=$1 [L,QSA]