2017-02-12 35 views
2

我正在使用.htaccess刪除我的網站上的.php擴展名。但在某些情況下,它會顯示「內部服務器錯誤」。重寫URL以刪除擴展名時發生內部服務器錯誤.htaccess

這裏是我的.htaccess代碼:

AddHandler x-httpd-php5-6 .php 

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule productos/(.+)/? /prueba/listado-productos.php?category=$1 
RewriteRule productos/(.+)/(.+)/? /prueba/listado-productos.php?category=$1&subCategory=$2 
RewriteRule productos/(.+)/(.+)/(.+)/? /prueba/listado-productos.php?category=$1&subCategory=$2&product=$3 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

來重寫這些URL刪除PHP擴展的代碼是最後三行。

假設我有一個文件夾,名爲directory和一個名爲根文件夾about.php

example.com -----> works 
example.com/directory ----> works 
example.com/directory/ ----> works 
example.com/about ----> works 
example.com/about/ ----> internal server error 

我該如何解決這個問題?我已經嘗試了一切!

+0

檢查你的錯誤日誌,看看錯誤是什麼。 – SuperDuperApps

回答

1

當您調試時,例如設置LogLevel debug rewrite:trace2,你會看到該請求/about/改寫爲/about/.php,並再次/about/.php.php,並再次/about/.php.php.php,依此類推,直到最終失敗,

AH00124:請求超過了10個內部重定向極限由於可能的配置錯誤。

您可以通過附加規則來防止這種情況,該規則考慮了尾部斜線。此規則與您已有的規則大致相同

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

唯一的區別是規則模式中的尾部斜線。這將重寫請求/about//about.php而不是/about/.php,因此找到正確的腳本而不是循環。


如果你想最小化規則的數量,例如,只有一個,而不是這兩個規則,你也可以嘗試這個稍微修改模式

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

這種模式同時匹配​​和/about/,這樣一來你就一氣呵成。

+0

對我來說完美的作品,這應該是被接受的答案。謝謝Olaf! – Silas

相關問題