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 に答える