2012-02-17 33 views
0

タイトルはかなり曖昧ですので謝ります。特定のパターンに一致するmod_rewrite

問題は次のコードにあります。キーワード文の後にアクションを追加する必要がありますが、アクションが存在しない場合はキーワードを上書きしないようにします。

アクションで入力されたURLはhttp://websitenamehere/uk/en/meet-us/update とすることなく、次のとおりです。だから私は何それを進めることは4文字以上の文字列である場合にのみ、アクション句はトリガされたいhttp://websitenamehere/uk/en/meet-us

。このhtaccessルールは、比較を行うときに設定されている国または言語に依存してはいけません。

私が何かを見逃している場合は、私に知らせてください。質問を更新します。私はそれがかなりシンプルでなければならないことを知っていますが、現時点では、私はhtaccessでうんざりしています。

#language 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-z]{2})/([a-z]{2})(?:/(.*)|)$ /$1/$3?lang=$2 [NC,QSA,PT] 

#country 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-z]{2})(?:/(.*)|)$ /$2?country=$1 [NC,QSA,PT] 

#keyword 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/(.*)/$ /$2?keyword=$1 [NC,QSA,PT] 

#actions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^/]+)/(.*)$ /?action=$1 [NC,QSA,PT] 

#withoutactions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^/]+)/(.*)$ /$2?keyword=$1 [NC,QSA,PT] 

RewriteCond %{REQUEST_URI} !(\.[^./]+)$ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)/$ /$1.php [NC,QSA,PT] 

答えて

0

これを今日わかった。基本的に何が起こっているのは、バックリファレンスを構築するときにhtaccessファイルが複数回ルールを通過するときです。

私は、元のキーワードラインにスキップを追加しましたが、それは単に無視されるだろう:

#keyword 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/(.*)/$ /$2?keyword=$1 [NC,QSA,PT,S=1] 

#withoutactions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^/]+)/(.*)$ /$2?keyword=$1 [NC,QSA,PT] 

#actions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^/]+)/(.*)$ /?action=$1 [NC,QSA,PT] 

htaccessファイルは、Sがもはや適用されないだろう二時間を走ったし、それがその後、withoutactionsがブロックヒットだろうというとき。

#keyword 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/(.*)/$ /$2?keyword=$1 [NC,QSA,PT,S=1] 

#withoutactions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteCond %{QUERY_STRING} !keyword 
RewriteRule ^([^/]+)/(.*)$ /$2?keyword=$1 [NC,QSA,PT] 

#actions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^/]+)/(.*)$ /?action=$1 [NC,QSA,PT] 

私は、これは後方参照と同様の問題を経験し、誰かを役に立てば幸い!キーワードはすでにルールをスキップするクエリ文字列にし、もしそうなら存在していた場合は、これを回避するために、私は単純にチェック

関連する問題