検索エンジンに適したURLにmod_rewriteを使用しています。私はうまく機能するこの行を持っています:
RewriteRule ^Pay ./pay.php [L] #Pay
ただし、訪問者がhttp://example.com/pay
(小文字に注意)と入力した場合にも一致させたいと思います。 NC
を使用しようとしましたが、500エラーが発生します。大文字と小文字の2つの別々のルールを作成しようとしましたが、500エラーになりました。
これは正規表現を使用して1行で実行できますか?何かのようなもの:
RewriteRule ^([P-p])ay ./pay.php [L] #Pay
もしそうなら、適切な方法は何ですか?そうでない場合、mod_spellingを使用せずにこれをどのように達成できますか?
RewriteRule ^Pay ./pay.php [L] #Pay
無限の書き換えループが原因で500エラーが発生します。上記の大文字と小文字を区別しないようにすると、URLが書き換えられます。 /pay.php
は現在と一致します大文字と小文字を区別しないパターン^Pay
など。
この場合、パターンをより制限的にし、「pay」だけに一致させることができます。単にstarts "pay"であるURLパスではありません。例えば:
# Pay
RewriteRule ^pay$ pay.php [NC,L]
susbstitutionの./
プレフィックスも削除しました。これは必須ではありません。また、Apacheは行末コメントをサポートしていません。
ただし、この書き換えで大文字と小文字を区別しないようにすると、重複コンテンツになる可能性があることに注意してください。
ケースに影響されない単純な書き換えルールについてはわかりませんが、Pまたはpを一致させようとする試みはほぼ修正されています。ダッシュと角かっこを省略するだけで機能します。これは私があなたのためにテストしたものです(可能な限り単純です):
RewriteRule ^/[Pp]ay /pay.php
角括弧内の文字は1文字の代替にすぎないため、
RewriteRule ^[Pp][Aa][yY] /pay.php
小文字と大文字の任意の組み合わせに一致します。ただし、バージョンが機能しなかった理由はわかりません。これは、「Pとpの間の任意の文字に一致する」という意味であり、P、Q、R、... Z、some-punktuation、a、bである必要があります。 、c ... p。私はあなたのバージョンをテストしていません。
角かっこ()は害を及ぼすべきではありません。単に「そこにあるものをすべて抽出し、置換文字列の「$ 1」としてアクセスできるようにする」という意味です。
提案:静的ファイルで試してください。ダミーコンテンツ(「これはtest.html」など)を使用してtest.htmlを作成し、テストしているWebサーバーを介してブラウザーでアクセスしてみます。次に、ルールを追加します
rewriterule ^/best.html$ /test.html
best.htmlにアクセスします-test.htmlが表示されます。うまくいかなかった部分が見つかるまで、書き換えルールの小さな部分を変更し続けます。