2011-12-21 12 views
2

かなりのURLを作るためにmod_rewriteの一連のルールを作成しようとしています。私はとても良い-この作品これまでindex.php?section=123&area=345&option=1 as /123/345/option=1.htaccess mod_rewriteチャレンジ

を提供したい

RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3 

[OK]を、ここで私の最初の問題だ:

  1. どのようにしている場合に動作することを強制しません変数の1つは定義されていません。誰かが/section/area/ではなく/sectionを閲覧するとします。 htaccessをオフにしておくと、デフォルトで/area/が自動的に作成されるようにすることはできますか?

  2. 同様に、/area/の末尾にスラッシュを付けるにはどうすればよいですか?現時点で末尾にスラッシュがない場合は、システムが第3の変数を探しているのに見つからないので、私は404を取得します。

答えて

1

あなたはこのような何かを探している、

RewriteRule ^(.+)/(.+)/(.+)|(.+)/(.+)/?|(.+)/?$ /index.php?section=$1&area=$2&$3 

あなたは[OR]フラグによって、これらのサブpattersを分離ミリアンペア。

このパターンは、箱型ではありません。修正する必要があるかもしれません。

+0

感謝をユーザー・エラーを奨励していないだろうこれは正しい方向にきれいに指摘しました。私は分かりやすくするために別のルールを分けることになりましたが、これは基本的にあなたのコードの適応です: 'RewriteRule ^(。+)/(。+)$ /index.php?section=$1&area = $ 2&$ 3 [L] RewriteRule ^(。+)/(。+)/($)/ $ /index.php?section=$1&area=$2 [L] 末尾のスラッシュの問題を扱っています。私はPHPを使って定義します。必要に応じてデフォルト領域 – whizzkid

0

これは、ユーザーのURL入力を「検証」しようとすると、かなり醜いことがあります。

長期間に渡ってメンテナンス性を向上させるため、またはより多くのねじれを追加したい場合は、それらを分けてください。ここで

は一例です。

#sunshine case 
RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3 

#if user enter /123/option=1, ie forgot 456 as the area 
RewriteRule ^(.+)/option=(.+)$ /index.php?section=$1&area=default&$2 

は私が最後のスラッシュとあなたの問題だかわからないんだけど、URLはいくつかのガイドがhereを見つけることができますとにかく123/456option=1? になることはありません。

私の意見: ユーザーが代わりにあなたのサイトが提供するリンクに依存するので自分でURLを入力したい場合は、URLを書き換え、それらに404を与えて停止、私は