如何在.htaccess中隐藏.php扩展名[重复]

Posted

技术标签:

【中文标题】如何在.htaccess中隐藏.php扩展名[重复]【英文标题】:How to hide .php extension in .htaccess [duplicate] 【发布时间】:2012-01-12 09:15:41 【问题描述】:

可能重复:Remove .php extension with .htaccess

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

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

我已经尝试了许多不同的代码变化,我在网上找到了,但仍然没有运气。 .htaccess 文件位于根目录中。

【问题讨论】:

对我来说很好(除了你可能想忽略尾部斜杠)。您确定您的主机上允许 htaccess 并且您确定支持 mod_rewrite 吗? 您是否出于美观或安全原因隐藏了扩展程序?如果是后者,那么人们可以通过其他方式找出网站使用的脚本语言。示例:ashleysark.com/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 如果我单击链接并删除 .php 结尾对我来说效果很好 【参考方案1】:

我用过这个:

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]

另请参阅:this question

【讨论】:

谢谢 ryanve,这很有魅力! 谢谢你 ryanve.. 太棒了..! 这适用于 windows 系统,但无法在我的 Ubuntu 13.04 中重写。你有什么解决方案吗?提前谢谢..! 您可以在此处将http://example.com/folder/$1 替换为http://%HTTP_HOST/folder/$1 我的链接从http://192.168.1.2/blisscount/user/about.php 重定向到http://192.168.1.2/blisscount/user/about,但现在我得到了404 Error【参考方案2】:

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

Options +MultiViews

或者甚至只是关注目录.htaccess

DefaultType application/x-httpd-php

后者允许将所有不带扩展名script 的文件名视为PHP 脚本。虽然 MultiViews 让网络服务器寻找替代方案,但当只提供基本名称时(然而,这会影响性能)。

【讨论】:

可能是为什么 cmets 中的 Dan 可以在没有扩展的情况下使其工作。很好的答案。 @mario 如果它有效,那就太棒了。 第一个解决方案对我有用。我已使用 Wordpress 将其添加到根目录 .htaccess。我的脚本正在重定向(.php 扩展名已隐藏且不需要)【参考方案3】:

1) 你确定 mod_rewrite 模块已启用吗?检查phpinfo()

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

/folder/thing -> /folder/thing.php

如果你真的想要

/thing -> /folder/thing.php

您需要从匹配表达式中删除文件夹。

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

RewriteRule ^([^/\.]+)/?$ $1.php  [L,QSA]

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

当服务器找到一个 .htaccess 文件时(由 AccessFileName) 它需要知道其中声明了哪些指令 文件可以覆盖早期的访问信息。

【讨论】:

以上是关于如何在.htaccess中隐藏.php扩展名[重复]的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 文件 - 删除 .php 扩展名“服务器错误”[重复]

使用 .htaccess 删除 .php 扩展名会重复我的页面吗?

使用htaccess隐藏文件扩展名

如何隐藏用户的文件夹树[重复]

htaccess删除除了一个特定文件夹之外的php扩展名

如何“不从特定页面删除'php'扩展名?