2016-04-22 160 views
2

mod_rewrite中有相當多的內容可用,但我根本無法獲得以下內容。處理htaccess中的尾部斜線

現在我有下面的代碼在我的htaccess文件:

RewriteEngine On 
Options -Indexes 
Options -Multiviews 
ErrorDocument 400 http://localhost/mywebsite/400.php 
ErrorDocument 403 http://localhost/mywebsite/403.php 
ErrorDocument 404 http://localhost/mywebsite/404.php 
ErrorDocument 500 http://localhost/mywebsite/500.php 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule (.*) $1.php [L] 

這將成功地使事情變得像mywebsite /檢索工作(而不是mywebsite/index.php文件)。 但是,在某些情況下,我會讓訪問者以斜線(mywebsite/index /)訪問站點,然後我的重寫不再起作用。我收到一個錯誤頁面。

那麼我怎樣才能讓它工作,以便任何一個帶有斜線,無斜槓或擴展名(.php)的頁面都可以在我的網站上使用?

我會補充說這是在Apache服務器(XAMPP)上的localhost上,以防這會影響mod_rewrite的工作方式。

回答

2

這種替換代碼:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule (.*) $1.php [L] 

RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ([^/]+)/?$ $1.php [L] 
+0

這使得兩個網址都帶有尾部斜槓並且沒有任何故障(只有使用擴展後才能使用的網址) – bucketman

+0

@Bucketman嘗試更新後的版本,它可以在我的服務器上運行。 – starkeen

+0

給了我一個404錯誤頁面。它不起作用的事實讓我懷疑我是否錯過了apache服務器中的一個設置,這將是非常奇怪的,因爲原始代碼對任何事情都很好,除了尾部空格。 – bucketman

0

像這樣的重寫規則應該做的伎倆:

RewriteRule ^(.*)/?$ $1.php [L] 
+0

我代替我重寫規則與你的,但結尾的斜線仍給我一個錯誤頁500。 – bucketman

+0

你的日誌說500錯誤是由什麼引起的?你沒有得到404讓我覺得別的事情正在發生。 – ceejayoz

+0

[core:error] [pid 10648:tid 1840] [client :: 1:17180] AH00124:由於可能的配置錯誤,請求超出了10個內部重定向的限制。如果需要,使用'LimitInternalRecursion'來增加限制。使用'LogLevel debug'來獲得回溯。 – bucketman

1

您可以使用:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.+)/?$ $1.php [L] 

因爲如果文件(無/)存在與否不能前測試。

+0

嘗試使用'mywebsite/index /'後面的斜槓時,我仍然收到錯誤500頁。如果相關,我會補充說這是在本地主機上,以防萬一它影響到它。 – bucketman