.htaccess(500 内部服务器错误) - 删除 url 中的文件扩展名

Posted

技术标签:

【中文标题】.htaccess(500 内部服务器错误) - 删除 url 中的文件扩展名【英文标题】:.htaccess (500 Internal Server Error) - removing file extension in url 【发布时间】:2014-03-23 18:19:34 【问题描述】:

这是我的源代码。

RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^([^\.]+)$ $1.php [NC]

内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。 请通过 admin@example.com 联系服务器管理员告知他们时间 发生此错误,以及您在此错误之前执行的操作。 服务器错误日志中可能会提供有关此错误的更多信息。

【问题讨论】:

每当您收到 500 错误时,请查看 Apache 的错误日志。日志中会详细说明。 看看这个,我敢打赌这是由于无限的重写循环,因为你在重写时没有[L] 标志。对/thing 的请求将导致/thing.php.php.php.php.php.php.php....,直到Apache 放弃。错误日志一定会告诉你的。 [2014 年 2 月 22 日星期六 08:53:48.038885] [core:alert] [pid 4540:tid 1588] [client ::1:2173] C:/wamp/www/MIS_Beta/.htaccess : 无效的命令“RewriteEngine”,可能拼写错误或由未包含在服务器配置中的模块定义 - 这是什么意思? 好吧,你没有启用 mod_rewrite。见this question for more info 启用该模块后,继续将[NC,L] 添加到您的RewriteRule,因为我怀疑您会需要它。 【参考方案1】:

首先确保你的 apache 开启了 mod_rewrite。我可以解释如何在 Linux 上执行此操作,但由于您在 Windows 上安装了 WAMP,所以那里的情况有所不同,但您可以通过谷歌搜索。

其次,您的RewriteRule 缺少[L] 标志,它会告诉Apache 这是应用于此请求的最后一条规则。但是这个丢失的标志不会导致你在 cmets 中给出错误。因此,首先要查找的选项是是否启用了 mod_rewrite。

正如 cmets 中有人建议的那样:请看一下这个答案,它提供了有关如何启用 mod_rewrite 的完整演练:https://***.com/a/13633635/1297136

【讨论】:

以上是关于.htaccess(500 内部服务器错误) - 删除 url 中的文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess(500 内部服务器错误) - 删除 url 中的文件扩展名

使用 .htaccess 进行 PHP 设置时出现 500 内部服务器错误

CentOS Apache .htaccess:此处不允许选项(500 - 内部服务器错误)

500 内部服务器错误 CodeIgniter htaccess mod_rewrite

本地主机上的 .htaccess 正常,网络服务器上出现 500 内部服务器错误

当我将正常页面重定向到AMP页面htaccess错误时,500内部服务器错误即将到来