1

我在 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 上按预期工作。

有什么问题?

4

2 回答 2

2

最后一行是:
[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 字节顺序标记,apache 认为它是垃圾字符(至少在 linux 上)。在 Windows 中,此 BOM 用于让 Windows 知道该文件被编码为 UTF-8,而不是使用任何默认的 Windows 文本文件(我认为它是 UTF-16,小端序)。你只需要使用你最喜欢的 linux 文本编辑器,然后删除这些字符。根据您使用的编辑器,它们甚至可能不会出现,因此您可能需要执行类似“从单词末尾选择RewriteEngine到行首,然后删除选择,然后从行首开始,只需RewriteEngine手动输入。

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

于 2012-09-06T23:25:48.560 回答
0

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

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

于 2021-07-30T18:45:18.653 回答