如何使用 .htaccess 隐藏.php URL 扩展名?

2022-08-30 21:33:24

我想要在我的文件中放入一些东西来隐藏我的php文件的文件扩展名,所以去 www.example.com/dir/somepage 会 www.example.com/dir/somepage.php 显示它们。.htaccess.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]

答案 1

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

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,这随后将影响所有此类请求属于此重定向,并可能导致此类请求停止工作。

要解决此问题,您可以在第一个请求中添加一个例外以忽略 POST 请求,以便不允许它们执行该规则。RewriteRule

# 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]

答案 2

删除 php 扩展名

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

RewriteEngine on


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

使用上面的代码,您将能够以 /file 的形式访问 /file.php

删除 html 扩展名

RewriteEngine on


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

注意:'RewriteEngine on'指令应该在每个htaccess的顶部使用一次,所以如果你想组合这两个规则,只需从第二个规则中删除该行。您还可以删除您选择的任何其他扩展名,只需在代码上用它们替换.php即可。

快乐的掌声!


推荐