我在 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 上一切都按预期工作。
有什么问题?
最佳答案
The last line is:
[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
) 是 unicode byte order mark对于 UTF-8 和 apache 认为它是垃圾字符(至少在 linux 上)。在 Windows 中,此 BOM 用于让 Windows 知道该文件被编码为 UTF-8,而不是任何默认的 Windows 文本文件使用(我认为它是 UTF-16,小端)。你只需要去使用你最喜欢的 linux 文本编辑器,并删除那些字符。根据您使用的编辑器,它们甚至可能不会显示,因此您可能需要执行类似“从 RewriteEngine
到行首的单词末尾进行选择,然后删除选择,然后,从行的开头,只需手动键入 RewriteEngine
。
删除 BOM 后将 htaccess 文件移回 Windows 后,htaccess 文件有可能无法正常工作,我不太确定。
关于linux - 在 Linux 上使用此 .htaccess 获取错误 500,在 Windows 上工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299684/