我在Windows上使用XAMPP,在Linux上使用LAMPP(Ubuntu)在本地使用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上按预期工作。
有什么问题?
答案 0 :(得分: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 byte order mark,而apache认为它是垃圾字符(至少在linux上)。在Windows中,此BOM用于让Windows知道该文件被编码为UTF-8而不是默认的Windows文本文件使用(我认为它是UTF-16,小端)。您只需要使用自己喜欢的linux文本编辑器,然后删除这些字符。根据您使用的编辑器,它们甚至可能无法显示,因此您可能需要执行类似“从单词RewriteEngine
的末尾选择到行的开头,然后删除选择,然后从该行的开头,只需手动输入RewriteEngine
。
在删除BOM后,将htaccess文件移回Windows后,htaccess文件可能无法正常工作,我不太确定。
答案 1 :(得分:0)
我也在记事本中打开 .htaccess 并收到错误 500。
我不知道我的解决方案是否适合您,但我只是从 .htaccess 中复制了所有内容,然后删除了旧的 .htaccess 并创建了一个新的,然后将数据粘贴回来,它起作用了。