簡體   English   中英

如何使用 .htaccess 隱藏.php URL 擴展名?

[英]How can I use .htaccess to hide .php URL extensions?

我想在我的.htaccess文件中添加一些內容,這將隱藏我的 php 文件的.php文件擴展名,因此轉到 www.example.com/dir/somepage 會顯示它們 www.example.com/dir/somepage.php。

有什么可行的解決方案嗎? 我的網站使用 HTTPS,如果這很重要的話。

這是我現在的 .htaccess:

RewriteEngine On

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

ErrorDocument 404 /error/404.php

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

在 DOCUMENT_ROOT 下的 .htaccess 中使用此代碼:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

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

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]

需要注意的是,這也會影響所有 HTTP 請求,包括 POST,這將隨后影響所有此類請求,使其落入此重定向,並可能導致此類請求停止工作。

要解決此問題,您可以在第一個RewriteRule中添加一個例外以忽略 POST 請求,因此該規則不允許它們使用。

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

刪除 php 分機

您可以使用 /.htaccess 中的代碼:

RewriteEngine on


RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [NC,L]

使用上面的代碼,您將能夠訪問 /file.php 作為 /file

刪除 html 擴展

RewriteEngine on


RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_FILENAME}.html [NC,L]

注意:'RewriteEngine on' 指令應該在 per.htaccess 頂部使用一次,所以如果你想結合這兩條規則,只需從第二條規則中刪除該行。 您還可以刪除您選擇的任何其他擴展名,只需將代碼中的 .php 替換為它們即可。

快樂.htaccessing!

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f       # if the requested URL is not a file that exists
RewriteCond %{REQUEST_FILENAME} !-d       # and it isn't a directory that exists either
RewriteCond %{REQUEST_FILENAME}\.php  -f  # but when you put ".php" on the end it is a file that exists
RewriteRule ^(.+)$ $1\.php [QSA]          # then serve that file (maintaining the query string)

</IfModule>

奇怪的是,這段代碼在 Windows 中的 XAMPP 中嘗試時給了我 HTTP 500 個錯誤。刪除注釋修復了它。 移動注釋也是如此,使它們在自己的行中,而不是與說明在同一行。

試試這個:

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]Try:

參考:

如何隱藏.htaccess中的.php擴展名

暫無
暫無

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

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