これの正規表現は何ですか?
文字列の場合に一致
- NOT(
.php
で終わるOR.html
で終わるORは/
を含む)
ありがとうございました!
編集:NOT
を回避するためにmod_rewrite
のロジックを変更できないため、Apache modの書き換えで式が使用されるため、NOT
の部分が必要です。
編集:私の最初の努力は([^/]+)(\.html)$(^\.php)$
でした-これはひどく間違っています
このドキュメント によると、Apache mod_rewriteは否定をサポートします。
Mod_rewriteでは、NOT文字( '!')も可能なパターンプレフィックスとして使用できます。これにより、パターンを無効にすることができます。たとえば、「現在のURLがこのパターンと一致しない場合」などです。これは、ネガティブパターンに一致させるのが簡単な例外的な場合、または最後のデフォルトルールとして使用できます。
したがって、次のようなことができるはずです。
!^(.*?/.*|.*?\.(?:php|html)$)$
そして、それは/を含まず、.phpまたは.htmlで終わらないものと一致する必要があります
ネガティブマッチよりも正規表現でポジティブマッチを行う方がはるかに簡単です。 ends in .php OR ends in .html OR contains /
を検索して、プログラムのロジックを逆にしてみてください。
厳密な正規表現では、特定の式を否定する一般的な方法はありません。 PCREを使用すると、パフォーマンスを犠牲にして、ネガティブ検索を構築するプロセスを大幅に簡素化するネガティブ先読みの利点があります。
^([^/]*\.(?!html$|php$)[^./]*)|[^/.]$
この正規表現を使用してください-
(.*\.php$)|(.*\.html$)|(.*\/.*)