在 Linux 上使用此 .htaccess 获取错误 500,在 Windows 上运行良好

Posted

技术标签:

【中文标题】在 Linux 上使用此 .htaccess 获取错误 500,在 Windows 上运行良好【英文标题】:Getting Error 500 with this .htaccess on Linux, works fine on Windows 【发布时间】:2012-08-31 05:59:56 【问题描述】:

我在 Windows 上使用 XAMPP,在 Linux (Ubuntu) 上使用 LAMPP 在本地使用 php 进行开发。我的.htaccess 文件中有这个:

RewriteEngine on
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME\.html -f
RewriteRule ^(.*)$ $1.html
RewriteCond %REQUEST_FILENAME\.php -f
RewriteRule ^(.*)$ $1.php

如您所见,我不想键入以 HTML 或 PHP 结尾的文件名的扩展名。我的两个.htaccess 包含相同的上述内容。

令人惊讶的是,当我在 Ubuntu 上请求任何文件(或目录)时(即使具有完整扩展名),我收到了 Error 500。如果我删除这个.htaccess,一切都会好起来的。

在 Windows 上一切正常。

有什么问题?

【问题讨论】:

错误日志说什么?尝试启用重写规则日志来调试它:) @rkosegi 如何启用重写规则日志? @rkosegi 在/opt/lampp/logs/ 有一个名为error_log 的日志文件。最后一行是:[Thu Sep 06 20:14:25 2012] [alert] [client 127.0.0.1] /opt/lampp/htdocs/.htaccess: Invalid command '\xef\xbb\xbfRewriteEngine', perhaps misspelled or defined by a module not included in the server configuration。但是我还是不明白为什么windows没有问题。 【参考方案1】:

最后一行是:[Thu Sep 06 20:14:25 2012] [alert] [client 127.0.0.1] /opt/lampp/htdocs/.htaccess: Invalid command '\xef\xbb\xbfRewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

那些字符 (\xef\xbb\xbf) 是 UTF-8 的 unicode byte order mark 并且 apache 认为它是垃圾字符(至少在 linux 上)。在 Windows 中,此 BOM 用于让 Windows 知道该文件被编码为 UTF-8,而不是使用任何默认的 Windows 文本文件(我认为它是 UTF-16,小端序)。你只需要使用你最喜欢的 linux 文本编辑器,然后删除这些字符。根据您使用的编辑器,它们甚至可能不会出现,因此您可能需要执行类似“从单词 RewriteEngine 的末尾选择到行首,然后从开头删除选择行,只需手动输入RewriteEngine

在删除 BOM 后将其移回 Windows 后,htaccess 文件可能无法正常工作,我不太确定。

【讨论】:

我已经知道 BOM,但不知道它会造成这种类型的问题。【参考方案2】:

我还在记事本中打开了 .htaccess 并收到错误 500。

我不知道我的解决方案是否适合你,但我只是从 .htaccess 中复制了所有内容,然后删除了旧的 .htaccess 并创建了一个新的,然后将数据粘贴回去,它就可以工作了。

【讨论】:

以上是关于在 Linux 上使用此 .htaccess 获取错误 500,在 Windows 上运行良好的主要内容,如果未能解决你的问题,请参考以下文章

在iis上使用Htaccess文件(Windows 10)

如何在 Windows 的 XAMPP 中配置 .htaccess?

在Apache和Linux/Unix上使用htaccess和htpasswd对文件夹/目录进行密码保护

在 Apache 服务器上获取 .htaccess 文件? (从 url 中删除 html)

如何使用 htaccess 重写从 url 中删除此目录/文件夹?

如何使用 Apache VirtualHost 获取 .htaccess 文件