簡體   English   中英

借助.htaccess刪除.php擴展名

[英]Remove .php extension with the help of .htaccess

我想從URL中刪除.php文件擴展名,我已經在.htaccess文件中編寫了代碼,但是我遺漏了一些東西,因為默認情況下,當我打開頁面時,它沒有.php擴展名,但是如果我手動在URL添加.php擴展名,然后頁面也會打開,我想避免這種情況。

.htaccess文件:

RewriteEngine On
RewriteBase /

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

# rewrite category
RewriteEngine On
RewriteRule ^blog-category/(.*)$ blog-category.php?category=$1 [NC,L]

# rewrite blog
RewriteEngine On
RewriteRule ^blog/(.*)$ blog.php?title=$1 [NC,L]

# error pages
RewriteEngine On
ErrorDocument 404 /404.php

# on 301 error redirect to softcrayons.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^softcrayons.com
RewriteRule (.*) http://www.softcrayons.com/$1 [R=301,L]

該動態配置文件中沒有任何內容可以阻止腳本直接被調用。 您必須為此添加另一個重定向:

RewriteEngine On 
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^/?([^.]+)\.php$ $1 [L,R=301]

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

這將強制進行外部重定向(因此更改瀏覽器中可見的URL),並對所有使用.php文件擴展名以及該文件實際存在的位置的請求發出第二個請求。

請注意,您可能必須注意不要創建無限的重寫循環。

我還添加了一些附加條件,以便僅在該文件實際存在的情況下內部重寫為.php


如果您確實要創建錯誤,請使用http狀態404來請求擴展名為.php URL,然后替換上面代碼中的重寫規則,如下所示:

RewriteEngine On 
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^/?([^.]+)\.php$ - [R=404]

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

但是請注意,正如我已經說過的,我認為這是一件愚蠢的事情。 為什么用錯誤使用戶感到沮喪? 您知道他們的實際需求,並且可以滿足該要求。 往正面想!


還有一個一般性提示:您應該始終喜歡將此類規則放置在http服務器(虛擬)主機配置中,而不是使用動態配置文件( .htaccess樣式文件)。 眾所周知,這些文件容易出錯,難以調試,並且確實降低了服務器的速度。 僅當您無法控制主機配置(閱讀:真正便宜的托管服務提供商)或者您的應用程序依賴於編寫自己的重寫規則(這顯然是安全噩夢)時,才提供它們作為最后的選擇。 )。

## hide .php extension snippet

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]`

HTML:

<a href="home">Index</a>

.htaccess

 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^([^\.]+)$ $1.php [NC,L]

鏈接會將您重定向到home.php文件,您的網址將是example.com/home,希望對您有所幫助。

問候!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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