名前が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.php
sample_create.php
など)。
これを修正するのを手伝ってください。
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
を無効にする必要があります(それ以外の場合は、lang
をlang.php
に書き換えるためにディレクティブをオーバーライドします)。
Options -Indexes -MultiViews
または、最初のディレクティブをより具体的にして(ユースケースに応じて)、exactlyfolder/lang
に一致し、そのURLにstartsであるURLは一致しないようにすることができます。たとえば、RewriteRule
patternを次のように変更します:^folder/lang$
(追加の末尾$
)。
Aside:大文字と小文字を区別しない一致が特に必要な場合にのみ、NC
(nocase
)フラグを使用します。 rewriteの場合、重複コンテンツの問題が発生する可能性があるため、おそらくそうではありません。