web-dev-qa-db-ja.com

類似した種類の名前を持つファイルの.htaccessの問題

名前がlang.phpのファイルと、同じフォルダーに同じlang_inst.phpの別のファイルがあります。使用している.htaccessは次のとおりです。

RewriteEngine On
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^folder/lang folder/lang.php [NC,L]


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)folder/lang_inst/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+) folder/lang_inst.php?lngid=$1&lngname=$2 [NC,L]

問題は、lng.phpに移動すると、lng.klklkまたはlngと入力してもうまく機能し、lng.phpページのみが表示されますが、表示しようとするとlng_inst.phpページlng.phpページと同じコンテンツを取得し、CSS全体が乱れています。 CSSの設計全体がすべて欠落しているということです。

他の名前で同じページを作成しようとしましたが、うまく機能しています。そのようなページが非常に多いため、ページの名前を変更したり、再作成したりしたくありません。同じ単語で始まるファイルを意味します(sample.phpsample_create.phpなど)。

これを修正するのを手伝ってください。

3
swetha

lng_inst.phpのリクエストは、最初のより一般的なルールによって自然にキャッチされます。 reverseの2つのルールが必要なので、より多くのspecificルールが最初になります。例えば:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)folder/lang_inst/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+) folder/lang_inst.php?lngid=$1&lngname=$2 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^folder/lang folder/lang.php [NC,L]

まだ行っていない場合は、MultiViewsを無効にする必要があります(それ以外の場合は、langlang.phpに書き換えるためにディレクティブをオーバーライドします)。

Options -Indexes -MultiViews

または、最初のディレクティブをより具体的にして(ユースケースに応じて)、exactlyfolder/langに一致し、そのURLにstartsであるURLは一致しないようにすることができます。たとえば、RewriteRulepatternを次のように変更します:^folder/lang$(追加の末尾$)。

Aside:大文字と小文字を区別しない一致が特に必要な場合にのみ、NCnocase)フラグを使用します。 rewriteの場合、重複コンテンツの問題が発生する可能性があるため、おそらくそうではありません。

1
MrWhite