[英]Remove .php and .html extensions AND have directories with same name?
我想在瀏覽器中刪除網站頁面的.php和.html擴展名。 我在網上找到了此代碼以添加到.htaccess文件中:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php`
但是,如果有一個名為“ home.php”的php文件,並且同時有一個名為“ home”的目錄,則此目錄將不再起作用。 我想我可能必須添加類似
Options All -Indexes -MultiViews
但我喜歡它也不起作用。 那么我該如何實現呢?
您可以在請求不帶/
與目錄同名時優先處理文件,並刪除php & html
並確定首先檢查哪個文件,如下所示:
DirectorySlash Off
RewriteEngine on
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.(php|html)[\s?/] [NC]
RewriteRule ^ /%1%2 [R=302,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*) /$1.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*) /$1.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*) %{REQUEST_URI}/ [L,R=302]
因此,通過上面的代碼,將刪除擴展名,然后首先檢查是否有與此匹配的php文件,然后檢查html,最后檢查是否有目錄。
因此,僅對/home
的請求將首先檢查名為home的php是否存在,然后進入目錄home,但請求/home/about
將直接轉到home目錄中的about。
清除瀏覽器緩存,然后對其進行測試,如果可以,請將302
更改為301
以獲取永久重定向
您可以在.htaccess
嘗試使用此簡單代碼
RewriteEngine On
RewriteRule ^([^\.]+?)/?$ $1.php [NC,L]
更新:正如@Niet提到的,我錯過了條件,因此在規則前添加此行。
RewriteCond %{REQUEST_FILENAME}\.php -f
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.