如何在.htaccess中隐藏.php扩展名

如何在.htaccess中隐藏.php扩展名,php,.htaccess,Php,.htaccess,可能重复: 我试图隐藏.php文件扩展名,但由于某些原因无法使其工作。我最近的尝试如下: <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^folder/([a-zA-Z_\-0-9]+)/?$ /folder/$1.php </IfModule> 重新启动发动机 重写规则^folder/([a-zA-Z \-0-9]+)/?$/folder/$1.php 我在网上找到了许多不同的代码变体,但

可能重复:

我试图隐藏.php文件扩展名,但由于某些原因无法使其工作。我最近的尝试如下:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^folder/([a-zA-Z_\-0-9]+)/?$ /folder/$1.php
</IfModule>

重新启动发动机
重写规则^folder/([a-zA-Z \-0-9]+)/?$/folder/$1.php
我在网上找到了许多不同的代码变体,但仍然没有成功。.htaccess文件位于根目录中。

1)您确定已启用mod\u重写模块吗?检查phpinfo()

2) 上述规则假定URL以“文件夹”开头。这是正确的吗?您确实想在URL中包含文件夹吗?这将匹配如下URL:

/folder/thing -> /folder/thing.php
如果你真的想

/thing -> /folder/thing.php
您需要从匹配表达式中删除文件夹

我通常使用它将请求路由到没有php的页面(但您的应该可以工作,这让我认为mod_rewrite可能无法启用):

3) 假设您在.htaccess文件中声明规则,您的安装是否允许在.htaccess文件中设置选项(AllowOverride)覆盖?有些共享主机没有

当服务器找到.htaccess文件时(如 AccessFileName)它需要知道在该文件中声明了哪些指令 文件可以覆盖以前的访问信息


使用PHP脚本SAN扩展的另一个选项是

Options +MultiViews
甚至只是在目录
.htaccess
中的下列内容:

DefaultType application/x-httpd-php
后者允许将所有不带扩展名的文件名
script
视为PHP脚本。虽然MultiView让Web服务器寻找替代方案,但只要提供basename(但是这会影响性能)。

我使用了以下方法:

RewriteEngine On

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

另请参见:

在我看来很好(除了您可能希望忽略尾随的斜杠)。您确定主机上允许htaccess并且支持mod_rewrite吗?是否出于外观或安全原因而隐藏扩展?如果是后者,那么人们可以通过其他方式了解站点使用的脚本语言。示例:如果我单击一个链接并删除.php结尾,对我来说效果很好。可能是因为注释中的Dan可以让它在没有扩展名的情况下工作。回答得好。@mario,如果它能起作用,那太神奇了。第一个解决方案对我起作用了。我已经使用Wordpress将其添加到根目录.htaccess中。我的脚本正在重定向(.php扩展是隐藏的,不需要)谢谢你ryanve,这很有魅力!谢谢你,瑞安。。太神奇了。。!这在windows系统中运行良好,但无法在我的Ubuntu 13.04中重写。。你对此有什么解决办法吗。。?Thanx提前。。!您可以替换
http://example.com/folder/$1
http://%{http\u HOST}/folder/$1
在此处。我的链接被重定向到
http://192.168.1.2/blisscount/user/about
from
http://192.168.1.2/blisscount/user/about.php
但是现在我得到了一个
404错误
RewriteEngine On

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