2

特定の単語に大文字が含まれている場合は小文字に書き換える必要がありますが、完全に小文字の場合はそうではありません (一致した場合は無限ループが発生します)。

私はこれを思いつきましたが、なぜそれが機能しないのか混乱しています:

# /MaTcHeD to matched
RewriteCond %{REQUEST_URI} ^(?i)matched(\/.*)?$
RewriteRule ^[a-z]*[A-Z]+[^\/]*(\/.*)?$ /matched$1 [R=301,L]

私には、これは、URLが「一致」または「一致」または「mAtched」または「MAtched」などの場合、URLの先頭に小文字([az])があり、その後に1つ以上の大文字が続く場合に一致することを示しています文字 ([AZ]) の後に "/" 以外の文字が続き、残りの URL が続きます (オプションの "/" の後にその他の文字が続きます)。これらの条件が真の場合、小文字の「/matched」にリダイレクトします。

私はブラウジングして、任意の単語に一致する多くのソリューションを見てきましたが、他のものは大文字であるため、問題が発生する可能性があります. いずれにせよ「一致」する必要がありますが、すべて小文字の「一致」にリダイレクトするには、すべて小文字が必要です。

4

1 に答える 1

1

これをカバーするためにいくつかのチェックを行うことができます。最初に、小文字ではないことを確認してください。

RewriteCond %{REQUEST_URI} !^(.*)/matched(.*)$

[NC]次に、フラグを使用して大文字と小文字の区別が無視された場合に、同じものが一致するかどうかを確認します。

RewriteRule ^(.*)/matched(.*)$ /$1/matched$2 [R=301,L,NC]

この時点で、大文字と小文字を区別せずにmatched一致したことがわかりますが、すべて小文字ではないため、すべて小文字にリダイレクトできます。


現在、htaccess レベルで一致を使用しているため、最初の "(.*)/" は必要ありません。それを使用するとうまくいきません。「一致」は、ドメインの後の最初のパス部分です

次にこれを試してください:

RewriteCond %{REQUEST_URI} !^/matched(.*)$
RewriteRule ^matched(.*)$ /matched$1 [R=301,L,NC]

問題は、%{REQUEST_URI}変数の先頭にスラッシュありますが、 との照合に使用される URI にはスラッシュRewriteRule がないことです (図を参照)。

于 2012-08-02T01:39:01.610 に答える