2011-09-23 140 views
0

抱歉,但我'少了解關於URL重寫......如何使url重寫apache沒有任何重寫條件?

我想我的URL重寫來自:
http://localhost/controller/index.php/user/edit

http://localhost/controller/user/edit

我可以用這個的.htaccess使其:

RewriteEngine On 
RewriteBase /controller/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [PT,L] 

但是,重寫工作,如果沒有文件在controller/user/edit.php 存在,我想在我controller/xxx到每個請求rewrited到controller/index.php/xxx該文件是否存在或不....

我已經刪除RewriteCond所以我目前的一個是這樣的:

RewriteEngine On 
RewriteBase /controller/ 
RewriteRule ^(.*)$ index.php/$1 [PT,L] 

但是,它顯示internal service error ..

回答

0

有很多事情對我沒有意義。主要是,你的問題說要重寫一個其中包含index.php的URL到一個沒有的URL,但是你的重寫規則,你說在某些情況下起作用的是相反的,它會將index.php預先掛接到請求。

如果您有權訪問您的apache錯誤和訪問日誌,那麼您可能會看到是否有更多關於錯誤發生的點的詳細信息 - 處理.htaccess文件時的情況,還是來自您的php程序?

我會認爲這裏的目標是把「漂亮」的網址像/控制器/用戶/編輯,並有計劃的index.php實際處理的路徑/用戶/編輯部分。

如果是的話,我想你可能要設置RewriteBase爲/,並改變你的.htaccess到

RewriteEngine On 
RewriteBase/
RewriteRule ^(.*)$ controller/index.php/$1 [PT,L] 

RewriteBase /指示說,所有的請求都相對於服務器的DOCUMENT_ROOT設置。對重寫規則的更改指示所有請求都轉到目錄controller和文件index.php,之後追加原始請求的路徑。 (注:我不認爲你想在這種情況下使用PT標誌,並且它是更好的形式來逃避。這是一個正則表達式運算符index\.php,但我認爲這些都不是相關的問題就在這裏)

如果你想前$ 1 /目前尚不清楚。如果你的PHP程序(index.php)被調用並知道如何處理它,那麼它很好,但有點不尋常,並且可能會出現以下情況:在PHP程序。

但你真的想這樣做嗎? RewriteCond %{REQUEST_FILENAME} !-f的典型用途是處理諸如圖像文件和css或javascript文件等靜態且無需由控制器處理的情況。 RewriteCond %{REQUEST_FILENAME} !-d取決於您的系統(但它的目的是查看該請求不適用於目錄)。

無論如何,我提出的基本改變可能會有所幫助,但如果沒有,也許你可以闡明你的意圖,並提供一些實際的URL和看看index.php