簡體   English   中英

刪除.php和.html擴展名,並具有相同名稱的目錄?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM