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

时间:2012-09-06 12:03:26

标签: linux apache mod-rewrite lamp

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

有什么问题?

2 个答案:

答案 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 并创建了一个新的,然后将数据粘贴回来,它起作用了。