2017-03-10 9 views
1

私は私の.htaccessファイルに次の行があります。RewriteRuleは、行位置を変更したときにのみ機能するのはなぜですか?

RewriteCond %{QUERY_STRING} id=([0-9]+) 
RewriteRule ^page/([0-9]+)/$ ?page=$1 [L] 
RewriteRule ^(20\d\d)/page/([0-9]+)/$ ?yearMeasure=$1&page=$2 [L] 
RewriteRule ^(20\d\d)/$ ?yearMeasure=$1 [L] 
RewriteRule ^category/([A-Za-z0-9-]+)/page/([0-9]+)/$ ?category=$1&page=$2 [L] 
RewriteRule ^category/([A-Za-z0-9-]+)/$ ?category=$1 [L] 
RewriteRule ^(20\d\d)/([A-Za-z0-9-]+)/$ ?type=post&year=$1&title=$2 [L,QSA] 

ファイルは上記のように残っている場合は、サーバーがページ/ 1//キャプチャしませんが。むしろ、404エラーを返します。しかし、2行目と3行目を反転させると、すべてが完全に機能します。どうしてこれなの?

RewriteCond %{QUERY_STRING} id=([0-9]+) 
RewriteRule ^(20\d\d)/page/([0-9]+)/$ ?yearMeasure=$1&page=$2 [L] 
RewriteRule ^page/([0-9]+)/$ ?page=$1 [L] 
RewriteRule ^(20\d\d)/$ ?yearMeasure=$1 [L] 
RewriteRule ^category/([A-Za-z0-9-]+)/page/([0-9]+)/$ ?category=$1&page=$2 [L] 
RewriteRule ^category/([A-Za-z0-9-]+)/$ ?category=$1 [L] 
RewriteRule ^(20\d\d)/([A-Za-z0-9-]+)/$ ?type=post&year=$1&title=$2 [L,QSA] 

編集:実験の数分後

RewriteCond %{QUERY_STRING} id=([0-9]+)直後に来るラインが無力であると思われます。

何か助けていただければ幸いです。

答えて

0

任意RewriteCond直接

それを以下のRewriteCondディレクティブは、ルール条件を定義RewriteRuleに属します。 1つまたは複数のRewriteCondをRewriteRuleディレクティブの前に置くことができます。次の規則は、URIの現在の状態がそのパターンと一致する場合、およびこれらの条件が満たされている場合にのみ使用されます。

1. RewriteCond ... 
2. RewriteRule ... 
3. RewriteCond ... 
4. RewriteRule ... 
5. RewriteRule ... 

したがって、この場合に条件1が2ルールに属し、条件3が4を支配するために属し、そして最後に5は全く条件を有していないルール。


これは、あなたが

1. RewriteCond ... 
2. RewriteRule ... 
3. RewriteRule ... 

を持っており、ルール2と3、

1. RewriteCond ... 
3. RewriteRule ... 
2. RewriteRule ... 

を切り替える際の条件は、他のルールに属し、意味。


あなたはルールの最初のセットを使用して/page/1/?id=5を要求すると、今、前の条件「QUERY_STRING一致id=([0-9]+)が」満たされているので、それは、働くだろう。

関連する問題