2013-04-26 54 views
1

我剛剛知道htaccess是如何工作的,但我總是與寫作語法混淆,我很感激任何人都可以幫助我解決下面的htaccess問題。在.htaccess中重寫語法

我有幾頁鏈接重定向到像

http://mydomain.com.au/product-details.php/142/categoryAbstract 

,但由於以前開發的圖像不加載錯誤,除非該網址是

http://mydomain.com.au/product-details.html/142/categoryAbstract 

他全部轉換PHP頁面到HTML(我真的不知道這是什麼意圖)但

現在的網址應該工作,即使它作爲http://mydomain.com.au/product-details.php/142/categoryAbstract

他爲此使用了下面的htaccess,但它不起作用。如果我手動更改網址從.php.html一切工作正常。

RewriteRule ^product-details.html/(.*)/(.*)$ product-details.php?productid=$1&category=$2 

我需要一個工作代碼行,以便即使url http://mydomain.com.au/product-details.php/142/categoryAbstract應該工作。

+0

以前的開發人員是否實際將所有頁面轉換爲HTML,或者他是否在htaccess文件中創建了一條可更改擴展名的行?你可以看看你的htaccess文件,看看這樣的行是否存在? – 2013-04-26 15:24:54

+0

他只是寫了一行,即使他在瀏覽器中調用phpinfo.html正在運行。 – Kerry 2013-04-26 15:26:00

回答

2

你只需要一個OR(a|b)考慮到這兩種可能性:

RewriteRule ^product-details\.(html|php)/(.*)/(.*)$ product-details.php?productid=$1&category=$2 
#---------------------------^^^^^^^^^^^ 

這可以改善,雖然一點點。 (.*)是貪婪的比賽。您最好使用([^/]+)作爲第一個分組,以匹配所有內容,直到下一個/。我也逃過了這一點,因爲\.因此它與文字匹配而不是任何字符

RewriteRule ^product-details\.(html|php)/([^/]+)/(.*)$ product-details.php?productid=$1&category=$2 

.php擴展通常改性或者通過重寫或實際的文件重命名和服務器配置以以隱藏來自最終用戶的某些服務器側信息解析.html作爲.php。阻止他們知道該網站在後端運行的技術。然而,實際上將文件重命名爲.html的次數要比使用URL重寫來隱藏.php的次數要少。

0
RewriteRule ^product-details.html/(.*)/(.*)$ product-details.php?productid=$1&category=$2 

什麼這個規則確實是採取product-details.html/之後和之前的最後一切/和第二位被後終於採取/直到行結束。那麼它需要這些位並將它們放在$ 1和$ 2所在的位置。

改變它,所以它接受.html和.PHP因爲它看起來像你抓住了第一位是數字和(.*)是一個貪婪的選擇可能是更好的,你可以用

RewriteRule ^product-details(.html|.php)/(.*)/(.*)$ product-details.php?productid=$2&category=$3 

改變用([0-9] *)替換它只會選擇數字。這樣,如果你有任何問題,你會沒事的。給你:

RewriteRule ^product-details(.html|.php)/([0-9]*)/(.*)$ product-details.php?productid=$2&category=$3