2012-12-02 31 views
0

對不起,標題不對。 我現在用使用.htaccess進行網址重寫。該怎麼辦?

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

其使用localhost/home 時工作正常,但我的問題是打字localhost/home.php時也works.I想打字localhost/home.php到一個錯誤頁面請求的頁面不存在時重定向。

我該怎麼用.htaccess或者我應該使用php來重定向?

回答

1

當您請求具有'.php'擴展名的URL時,您的任何.htaccess條件都不會被滿足,因此服務器(Apache)只會正常處理請求。這就是它工作的原因。

在我看來,最簡單的是前添加另一個規則上一個:

RewriteCond %{REQUEST_URI} \.php$ # if it ends in .php 
# note we're using REQUEST_URI above to only match when 
# the URI ends in .php, not the requested file, 
# otherwise we would have a endless loop! 
RewriteRule ^(.*)$ /error_page.php # note the leading slash 

如果您希望瀏覽器重定向添加[R]選項將RedirectRule(我想你需要添加完整路徑),例如:

RewriteRule ^(.*)$ /path/error_page.php [R] 
+0

我上 的RewriteCond%{REQUEST_FILENAME}使用RewriteEngine敘述當有重定向循環\ .PHP $ 重寫規則^(。*)$ HTTP://本地主機/錯誤[R] 的RewriteCond%{REQUEST_FILENAME} -D- RewriteCule%{REQUEST_FILENAME} \。php -f RewriteRule ^(。*)$ $ 1.php –

+0

不要將'localhost'(主機名)放入重寫中,只需用'/'開始。 – jmlnik

+0

如果仍然不起作用,請嘗試添加'L'選項(即'[R,L]'),但我懷疑它會需要那個 – jmlnik

1

你在做什麼是追加「.PHP」到REQUEST_FILENAME,如果它不是一個目錄,如果加入「.PHP」,以它導致在現有的頁面。當輸入localhost/home.php時,重寫不會觸發,因爲它不會找到localhost/home.php.php。所以對於第二種情況,重寫是完全不相關的。您可能需要檢查您是否正確處理404情況下的正常處理。例如,您是否配置了ErrorDocument指令?那麼你可能會考慮刪除-f條件,並讓它重定向到home.php.php,這當然會失敗。