2

私は古い動的WebサイトをWindowsサーバーからLinuxに移動するという任務を負っています。このサイトは当初、大文字と小文字を区別せずに作成されました。一部のファイル名はすべて大文字、一部は小文字、一部は混合でした。もちろん、これはWindowsでは問題になりませんでしたが、現在、大文字と小文字を区別するファイルシステムに移行しています。

クイック検索/名前変更コマンド(別のチュートリアルのおかげで)を使用すると、ファイル名がすべて小文字になります。

ただし、コード内のURL参照の多くは、これらの大文字と小文字が混在するファイル名を指しているため、この問題を解決するためにmod_spelingを有効にしました。1ページを除いて、ほとんどの部分で問題なく動作しているようです。ファイル名haematobium.htmlがあり、リンクが指すたびに、ブラウザの.../haematobium.htmlように書き換えられます。.../hæmatobium.html

そもそもこの奇妙な文字がどのようにファイル名に組み込まれたのかはわかりませんが、HTMLドキュメントのコードを修正して、にリンクするようにしhaematobium.html、ファイル自体の名前を変更しhaematobium.htmlて一致させました。

.../haematobium.htmlChromeでリクエストすると、アドレスバーに「修正」され、「リクエストされたURLがこのサーバーで見つかりませんでした.../hæmatobium.html」というエラーが表示されます。.../hæmatobium.html

IE9では、ログイン(これは.htaccessで保護されたページです)を求められ、それを入力してから、URLをに転送すると.../h%C3%A6matobium.htmlロードされません。

私の欲求不満の中で、私はhaematobium.html両方hæmatobium.htmlにコピーしましたhæmatobium.htmlが、それでも、3つのページのどれも実際にはロードされません。

だから私の質問:mod_spelingがスペルミスのあるURLを「学習」しようとしていることをどこかで読んだ。それは実際にファイルの名前を変更しますか(奇妙な文字が由来している可能性があります)?呼び出されたものと転送されたもの(クリアできるキャッシュ)のキャッシュを保持していますか?

PS。MySQLデータベースのテーブルとフィールドへの大文字と小文字が混在する参照も多数ありますが、それはまったく別の悪夢です。

4

1 に答える 1

1

[まだコメントできないので、答えます。]

あなたの質問では、haematobium.htmlの2つの名前(2文字のae [ASCII]または1つの合字文字æ [Unicode])のどちらが実際にApacheのファイルシステムに存在するかを完全に明確にすることはできません。

シェルで次のことを試してください。

$ echo -n h*matobium.html | hd

出力は、次の2つの選択肢のいずれかである必要があります。これはASCIIであり、 aeにそれぞれ61と65があります。

00000000  68 61 65 6d 61 74 6f 62  69 75 6d 2e 68 74 6d 6c  |haematobium.html|
00000010

そしてこれはUnicodeであり、単一文字のc3 a6がありますæ

00000000  68 c3 a6 6d 61 74 6f 62  69 75 6d 2e 68 74 6d 6c  |h..matobium.html|
00000010

ASCIIバージョンを使用することをお勧めします。これにより、作業がかなり楽になります。

さて、あなたの実際の質問に移りましょう。mod_spelingは、データを「学習」したり、名前を変更したり、キャッシュしたりしません。キャッシュは、ブラウザによって、またはブラウザとサーバー間のプロキシによって実行されます。

実際には、 wgetcurlなどのコマンドラインツールを使用してこれらのケースをテストすることをお勧めします。これらのツールは、すでに利用可能であるか、Linuxに簡単にインストールできるはずです。

wget -Sまたはを使用curl -iして、Webサーバーから送信された応答ヘッダーを実際に確認します。

于 2012-10-27T22:07:40.743 に答える