3

重複の可能性:
mod_rewrite を使用した大文字と小文字を区別しない URL

URL の大文字と小文字を区別しないようにする必要があります。つまり、http://www.test.com/About.phpとhttp://www.test.com/about.phpを使用する必要があります。以下のコードを試しました。 .しかし、それは機能しません.それはインデックスページを示しています.つまり、インデックスページのコンテンツを示しています

 #Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]
4

2 に答える 2

4

それ以来、この質問を見つけました。これには、受け入れられた回答があります(参照用に以下にコピーされています):

CheckSpelling on

あなたの状況と同じ(または十分に似ている)ようです。

この質問を重複として閉じる方法/かどうかはわかりませんが、参照された回答が最初に問題を解決するかどうかを確認する価値があります:)

于 2012-04-20T09:06:03.817 に答える
0

*nix プラットフォーム上の Apache Web サーバーは、URL で大文字と小文字を区別します。*nix ファイル システムでも大文字と小文字が区別されます。

そのため、Apache 構成内で実行しようとすることは、そのままではサポートされていません。

ファイルがいくつかしかない場合は、ルールを .htaccess にハードコーディングするか、書き換えマップの作成を開始できます。

RewriteRule ^about.php$ About.php [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]

mod_spellingURL とディスク上のファイル名の違いを処理できるモジュール (例: など) を使用して Web サーバーを拡張することにも関心があるかもしれません。

もう1つの方法は、index.php要求されたファイルの小文字バージョンを内部でチェックし、$_GET['q']存在する場合はそれ以降をinclude確認することですreturn

$basename = strtolower(basename(realpath($_GET['q'])));
if (is_file($path = __DIR__ . '/' . $basename)) {
    include($path);
    return;
}

実際のファイルシステムと比較する方法は、具体的なニーズと解決戦略によって異なります。

于 2012-04-20T08:28:32.387 に答える