2011-08-16 7 views
1

posts.phpページでうまく動作している.htaccessファイルのapache2に書き換えルールがあります。Apache mod_rewriteルールが別のページで動作しない

mysite.com/post.php?id_name=this-is-the-title-of-my-site 

は私が

mysite.com/cats.php?cat_label=articles 

が、私は同じを使用している

mysite.com/articles 

なるようcats.phpページに同じルールを使用したい

mysite.com/this-is-the-title-of-my-site 

なりルールを変更し、ファイル名とパラメータが、cats.phpページのルールは、失敗すると、私がいないことを好むだろうが、私は

mysite.com/cats/articles 

これになるために構造を変更する気にしない

posts.phpルールによって上書きされるようですすべてのヘルプは本当に

答えて

1

を高く評価された瞬間

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ post.php?id_name=$1 [L,QSA] 


RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ cats.php?cat_label=$1 [L,QSA] 

で私が使用している.htaccessファイルでのようにときにフラグ[L]は、「最後の」を意味しますルールが一致した場合、テストされた最後のリライトルールです。 2つのタイプのリダイレクトを区別する方法が必要です。ここではあなたがそれを行う可能性がある二つの方法があります:

(1)ではなく、あなたのカテゴリーで、あなたのポスト名のすべてでダッシュを持っているので、自分の与えられた例の両方が与えられたとして働く:

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^-]+)$ cats.php?cat_label=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ post.php?id_name=$1 [L,QSA] 

(2)カテゴリのディレクトリを追加して、魔法のキャラクターが何も起こらないようにします。これは間違いを招く可能性があります。あなたは既に上記の可能性に直面しています。ここではそれがどのように見えるかです:

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^cats/(.*)$ cats.php?cat_label=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ post.php?id_name=$1 [L,QSA] 

両方のケースでは、我々は[L] ASTとしてフラグを立てる、最初のより具体的なバージョンと一致します。それから、私たちは最後に広い、キャッチオールを持っています。

+0

+1は創造的な回避策では合意しましたが、option2はより良いです –

関連する問題