2017-07-06 10 views
0

複数の条件でURLを使いやすいようにしたいと思います。 Htaccess - 複数の異なる条件でURLを書き換えます。

私はこれを得た: www.example.com/?lang=en&page=test&model=mymodel

私が持っていると思います:www.example.com/en/test/mymodel

をしかし、私は、これは(他のパラメータを持つ)も得た:

www.example.com/?lang=en&otherpage=othertest&othermodel=myothermodel

でなければなりません:

www.example.com/en/othertest/myothermodel

ウェブサイト全体でこれを行うにはどうすればよいですか?

+0

あなたは友好的なURLが与えられているので、Apacheはそれを一意の「非友好的な」URLにマップするルールを必要とします。あなたの2つの友好的なURLの例では、第1のものと第2のものとを区別することはできません(language/value1/value2と全く同じパターンを持ち、otherpageの代わりにvalue1をページにマップする手掛かりはありません。 modelの代わりにothermodelへ –

+0

私はそれを行うための解決策がありました。 –

答えて

0

あなたはこのように見えるフレンドリーなURLを使用するつもりなら:

www.example.com/<language>/<value1>/<value2> 

を、その後のApache は、あなたの第一及び第二の「非友好的」なURLを区別することができません言及:パラメータ名(pagemodel第一で、otherpage及び第二URLでothermodel)が存在しない、とguesseすることはできませんので

www.example.com/?lang=en&page=test&model=mymodel 
www.example.com/?lang=en&otherpage=othertest&othermodel=myothermodel 

ですd、フレンドリーなURLから。

考えられる回避策は、使用するシナリオの数、つまり処理するパラメータの数によって異なります。

など。 <parameter_set>場合は、最初のパラメータセットを使用するようにApacheを伝え、その後、

www.example.com/<language>/<parameter_set>/<value1>/<value2> 

:あなたが唯一のいくつかのシナリオを持っている場合は、パラメータ名はそうのように、使用するようにApache を伝えるフレンドリーURLパターンにパーツを追加することができます例えば1であれば2番目のセット、そうであれば2番目のセットです。

サンプル書き換えルールセットは次のようになります。

RewriteEngine On 
RewriteRule ^([\w]+)/1/([\w]+)/([\w]+)$ ./?lang=$1&page=$2&model=$3 
RewriteRule ^([\w]+)/2/([\w]+)/([\w]+)$ ./?lang=$1&otherpage=$2&othermodel=$3 

(彼らは他の文字列かもしれない)12は完全に任意であることに注意してください。

当然、the official docsが役立ちます。