2017-01-17 16 views
0

.htaccessのルールをいくつか学びましたが、一部は完全に実行しています。しかし、実行し、エラーを示すか404特定のURL書き換えルールで404を取得する

これらのルール

RewriteEngine on 

# index.php?store=xyz (executing perfectly) 
RewriteCond %{QUERY_STRING} store=([^&]+)&? 
RewriteRule /?index.php$ /%1 [END,R=301] 

RewriteRule ^/?([a-zA-Z0-9]+)$ index.php?store=$1 [END] 
RewriteRule ^/?([a-zA-Z0-9]+)/products$ index.php?store=$1&view=products [END] 
RewriteRule ^/?([a-zA-Z0-9]+)/products/([0-9]+)$ index.php?store=$1&view=products&category=$2 [END] 
RewriteRule ^/?([a-zA-Z0-9]+)/products/([0-9]+)$ index.php?store=$1&view=sales&sale=$2 [END] 
RewriteRule ^/?([a-zA-Z0-9]+)/single/([0-9]+)$ index.php?store=$1&view=single&product=$2 [END] 

# index.php?store=xyz&view=products(executing perfectly) 
RewriteCond %{QUERY_STRING} store=([^&]+)&? 
RewriteCond %{QUERY_STRING} view=products&? 
RewriteRule /?index.php$ /%1/products [END,R=301] 

# index.php?store=xyz&view=products&category=123(executing perfectly) 
RewriteCond %{QUERY_STRING} store=([^&]+)&? 
RewriteCond %{QUERY_STRING} view=products&? 
RewriteCond %{QUERY_STRING} category=([^&]+)&? 
RewriteRule /?index.php$ /%1/products/%3 [END,R=301] 

# index.php?store=xyz&view=sales (error 404) 
RewriteCond %{QUERY_STRING} store=([^&]+)&? 
RewriteCond %{QUERY_STRING} view=sales&? 
RewriteRule /?index.php$ /%1/sales [END,R=301] 

# index.php?store=xyz&view=sales&sale=123 (error 404) 
RewriteCond %{QUERY_STRING} store=([^&]+)&? 
RewriteCond %{QUERY_STRING} view=sales&? 
RewriteCond %{QUERY_STRING} sale=([^&]+)&? 
RewriteRule /?index.php$ /%1/sales/%3 [END,R=301] 

# index.php?store=xyz&view=single&product=123(executing perfectly) 
RewriteCond %{QUERY_STRING} store=([^&]+)&? 
RewriteCond %{QUERY_STRING} view=single&? 
RewriteCond %{QUERY_STRING} product=([^&]+)&? 
RewriteRule /?index.php$ /%1/single/%3 [END,R=301] 

ある取得されないいくつかがありますが、私が間違ってやっていることを教えていただけますか?

+0

コードを確認してください!私は '(完璧に実行する')と '(エラー404)'を書いており、そのルールは以下のように書かれている –

答えて

0

あなたは

のindex.php?ストア= xyzの&ビュー=単一&製品は= 123

/%1 /シングル/%からクライアントをリダイレクト3

a NDあなたはまたに

のindex.php?ストア= xyzの&ビュー=販売&販売= 123

からクライアントをリダイレクトRewriteRule

RewriteRule ^/?([a-zA-Z0-9]+)/single/([0-9]+)$ index.php?store=$1&view=single&product=$2 [END] 

に対応しています

/%は、1 /販売/%3

が、RewriteRule対応が存在しない、2つだけ

RewriteRule ^/?([a-zA-Z0-9]+)/products/([0-9]+)$ index.php?store=$1&view=products&category=$2 [END] 
RewriteRule ^/?([a-zA-Z0-9]+)/products/([0-9]+)$ index.php?store=$1&view=sales&sale=$2 [END] 

だから多分、 "製品" のいずれかのルール変更 "を販売" あなたを修正するには即時の問題。


リダイレクトルールは、あなたが考えるかもしれないことに注意してください。 、プレーンテキストに加えて説明

ためRewriteRuleを参照してください、だけ%1が有効である、あなたの書き換えルールに%1%3に置換文字列をすることができます対応していない、3 RewriteCondを持つ

RewriteCond %{QUERY_STRING} store=([^&]+)&? 
RewriteCond %{QUERY_STRING} view=single&? 
RewriteCond %{QUERY_STRING} product=([^&]+)&? 
RewriteRule /?index.php$ /%1/single/%3 [END,R=301] 

含める

  1. ...

  2. 後方参照(%のN)最後にマッチしたのRewriteCondパターン

は両方が%1%3、あなたが最後RewriteCond、例えばにの部分をキャプチャする必要があります持っているために、

RewriteCond %{QUERY_STRING} store=([^&]+)&view=(single)&product=([^&]+) 
RewriteRule ... 

は、複数の部品を捕獲するためのソリューションのためのRewriteCond to match query string parameters in any orderanother answerを参照してください。

関連する問題