18

我想在我.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]
4

4 回答 4

51

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

要解决此问题,您可以在第一个忽略 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]
于 2012-04-05T15:32:22.110 回答
5

删除 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' 指令应该在每个 htaccess 的顶部使用一次,所以如果你想组合这 2 个规则,只需从第二个规则中删除该行。您还可以删除您选择的任何其他扩展名,只需在代码中将 .php 替换为它们即可。

快乐的htaccessing!

于 2016-01-29T13:11:04.417 回答
2
<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 错误。删除评论修复了它。移动注释也是如此,因此它们在自己的行上,而不是在与说明相同的行上。

于 2012-04-05T12:02:19.020 回答
0

试试这个:

# 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 扩展名

于 2012-04-05T11:51:42.717 回答