.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