1

Cloud9 IDEを使用してプロジェクトに取り組んでおり、Apache 2.0 で PHP5 を実行しています。私は主にフロントエンド開発者ですが、PHP については十分な経験があります。私は MVC フレームワークに精通しており、程度は低いですが、この機能は私がエミュレートしようとしているものですが、より単純です。私は CakePHP を実装しようとしましたが、必要なものに対して少し堅牢すぎることがわかりました。バックエンドの重いセットアップは必要ありません。アプリケーション用のカスタム ルーティング メカニズムを作成したいと考えています。

理想的には、自分のサイトへのすべてのリクエストが 1 つのページ (このカスタム「コントローラー」) を通過するようにしたいと考えています。そこから、適切なテンプレート、http コード、エラーなどを見つけ出す独自のロジックを記述して、含めることができます。私の質問は、どうすればこれを実現できますか? つまり、サーバー上のディレクトリを要求するのではなく、 をhttp://mysite.c9.io/user/view/2介してチャネリングする要求を行うにはどうすればよいでしょうか?http://mysite.c9.io/index.php/user/view/2

および .htaccess ルールについては漠然と知っていmod_rewriteますが、ここで何らかの役割を果たしている可能性があると思います。

4

1 に答える 1

1

まず、mod_rewrite有効になっていることを確認します。httpd.confファイルを確認してください

 LoadModule rewrite_module modules/mod_rewrite.so

前にa が付いて無効になっていないことを確認してください#。次に、ルート<Directory>設定を次のように変更します

<Directory />
  Options All
  AllowOverride All
</Directory>

の出現箇所をすべて に変更してAllowOverride NoneくださいAll。次に、Apache を再起動します。

mod_rewrite有効になったので、これを.htaccessWeb ルート/ディレクトリのファイルに追加します。

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_URI} !^/index\.php$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d # not a dir
RewriteCond %{REQUEST_FILENAME} !-f # not a file
RewriteRule ^ index.php [L]

これにより、そうでなければ404(画像、css、js などを除外することを意味します) だったすべてのリクエストが、フロント コントローラーを経由してルーティングされるようになりindex.phpます。一部のコンテンツ管理システムでは、別のチェックを追加して、フレームワークが実際に期待する種類のリクエストを処理するためにのみ呼び出される%{REQUEST_URI}ことを確認します。index.php

Joomla、たとえば、次を追加します。

RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf))$ [NC]
于 2013-08-23T03:49:43.637 に答える