2017-04-15 10 views

答えて

2
RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L] 

...私は/forum/folder

パターンがスラッシュを許可していませんので、ごRewriteRuleパターン(すなわち。^([A-Za-z0-9_-]+)/$)がすでに、URLパス/forum/folderを除外を除外することにしたいです(ディレクトリ区切り文字)をURLパスの途中に配置します。終わりにのみ。

したがって、/forum/folderがまだルーティングされている場合、何か他のものがです。このサブディレクトリに.htaccessがある場合(物理ディレクトリであると仮定して)、mod_rewriteを使用すると、競合が発生する可能性があります。


はそうでない場合は、例外を作るためにいくつかの方法があります。

#1 - すべてのファイルとフォルダを除外:あなたは(具体的/forum/folderを想定して書き換えられるから、すべてのファイルとフォルダを除外したい場合物理ディレクトリの場合)、具体的にこれを確認し、URLパスがファイルまたはディレクトリにマップされていない場合にのみRewriteRuleを処理することができます。たとえば:リクエストからクエリ文字列がデフォルトで追加されるので、

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([\w-]+)/$ pages/$1.php [L] 

QSAフラグは、ここでは必要ありません。 のクエリ文字列を指定していて、これをリクエストのクエリ文字列とマージする必要がある場合のみ、このフラグが必要です。そして、Deadooshkaがコメントで述べたように、\w[A-Za-z0-9_]の短縮形文字なので、これは正規表現を少し簡略化します。


#2 - ルールを除外:あなたが処理を除外し、単に停止するパスと一致するファイルの開始時にルールを使用してください。たとえば、次のように

RewriteRule ^forum/folder - [L] 

要求されたURLが/forum/folderで始まる場合は、ここで停止し、さらにルールを処理しません。


#3 - 否定条件:は、ルール自体に否定 conditon(RewriteCondディレクティブ)を含めます。例:要求されたURLが/forum/folderで起動しない場合

RewriteCond %{REQUEST_URI} !^/forum/folder 
RewriteRule ^([\w-]+)/$ pages/$1.php [L] 

は、これが唯一のRewriteRuleを処理します。CondPatternの接頭辞!は、正規表現を無効にします。


#4 - RewriteRuleパターンで否定先読み:あなただけ、あなたはRewriteRuleパターン否定先読みを使用することができますが、このルールから除外する一つのルールと1つのURLを持っている場合(正規表現)。例えば、上記のディレクティブでURL /forumを除外するために:

RewriteRule ^((?!forum)[\w-]+)/$ pages/$1.php [L] 

(?!forum)は否定先読みです。

+0

これはうまくいかなかった:( –

+0

あなたの質問にあなたが試みたコードを追加してくださいあなたの '.htaccess'ファイルに他の指示があるなら'.htaccess'ファイル全体を追加する - 競合する可能性があります。また、サブディレクトリに他の' .htaccess'ファイルもありますか? – MrWhite

+0

既存のディレクティブがすでにURLパスを除外しているので、 '/ forum/folder'の形式のものです。このサブディレクトリに追加の' .htaccess'ファイルがあると、それが動作しない理由である可能性があります。 – MrWhite

関連する問題