2012-10-20 43 views
0

我是Apache重寫URL的初學者。很難做到mod重寫

我有一個問題,重寫URL。

我想重寫www.test.com/abc/index.php?val=123到www.test.com/abc/123/index.php

注:ABC是文件夾

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/([0-9]+)/index.php $1/index.php?val=$2 [QSA,L] 

回答

0

你在RewriteRule中的正則表達式沒有意義。另外,您不能在RewriteRule中引用查詢字符串的一部分,因此您必須另外使用RewriteCond來捕獲查詢參數。

試試這個:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{QUERY_STRING} val=([0-9]+) 
RewriteRule ^(.+)/index.php $1/%1/index.php [L] 

它始終是一個好主意,讓Apache本身幫助您進行調試表達式:使用記錄功能:閱讀文檔的兩個命令RewriteLogRewriteLogLevel。他們轉儲每一步,並理解算法內實際發生的事情。

所需的所有信息都在fine documentation提供。這真的是值得通過...

+0

不好意思,不得不再次進行編輯。希望這次是正確的! – arkascha

+0

我嘗試鍵入test.com/abc/123/index.php,但它是錯誤的。請求的URL/abc/123在此服務器上找不到。 – user1759419

+0

嗯,是的,如果這樣的文件夾不存在,錯誤是有道理的。你在你的問題中寫道,這是你想要重寫請求的最終url:'www.test.com/abc/123/index.php'。這會在文件夾「123」內請求一個文件「index.php」。 – arkascha

0

工作。如果你正在寫在htaccess文件這一規則添加RewriteBase指令

RewriteEngine On 
RewriteBase/