2009-03-20 19 views
6

これは私がやろうとしていることです。私はシンプルなフレームワークを持っており、正しいファイルを指すようにURLを書き換えるためにmodリライトを使用しています。私は、Webフォルダ内にあるプロセスフォルダを持っています(Webフォルダは、画像、CSSなどの実際のWebサイトファイルがすべてあります)。.htaccessファイルが存在しない場合のリダイレクト

これは素晴らしいですが、私が今やろうとしているのは、フォームを処理するdefault.phpファイルを持つことです。私はそれにフォームを指す場合、ファイルが素晴らしい作品が、私はそれが適切なファイルのフォームを指すことができるようにしたいとファイルがそこにない場合は、default.phpを使用します。

フォームは、アクションは/ {ID OF THE FORM} .phpを処理するように設定されています。誰でもクラスを使用してフォームを作成でき、特別な処理をする必要がなければ、default.phpファイルは形。

私はちょうどdefault.phpを常に使用するようにフォームクラスを設定してから、default.phpファイルで適切なファイルが存在するかどうかを確認できます。

RewriteRule ^process/([^/]*) /web/process/$1 
RewriteCond %{DOCUMENT_ROOT}/web/process/$1 !-f 
RewriteCond %{DOCUMENT_ROOT}/web/process/$1 !-d 
RewriteRule ^process/([^/]*) /web/process/default.php [L] 
+0

私は非常によく似た[質問](http://stackoverflow.com/questions/470880/rewriterule-checking-file-in-rewriten-file-path-exists/471994#471994) ://stackoverflow.com/questions/470880/rewriterule-checking-file-in-rewriten-file-path-exists)。 –

答えて

2

あなたは、一般的に、あなたのRewriteCond呼び出しを持っている必要があります。それがない場合、それは、フォームの処理を保持していない場合は、その後、そのファイルを使用しますが、私はまだこのようなものがモッズ書き換えに働くだろうかどうかを知るために好奇心あなたのRewriteRuleの前に。 Condsが満たされている場合、ルールがトリガーされます。

+0

はい、どうすればprocess/filenameをweb/process/filenameに書き換え、web/process/filenameが存在しない場合はweb/process/defaultに移動しますか? –

+0

いずれの状況でもあなたのために働いていますか?デフォルトのケースのロジックは正しいものの、最初のルールは毎回実行される可能性があります。 –

14

だけでこのルールは、それを行う必要があります。

RewriteCond %{DOCUMENT_ROOT}web/$0 !-f 
RewriteRule ^process/[^/]+$ web/process/default.php [L] 

要求されたパスが既存のファイルにマッピングできない場合は、デフォルトのファイルに書き換えされなければなりません。

+2

+1これはうまくいくはずです。きれいでコンパクトです。 –

関連する問題