質問: Webサイトの階層について。 ドメインのルートディレクトリに、たくさんのphpファイルを置いておくのがあまり綺麗でないと思いまして、 ルートにindex.phpだけを置いて、下の階層からphpを読み込む方法はないでしょうか? サイトは英語サイトと、日本語サイトで分けているので、 以下のように役割ごとフォルダに分けて配置したいと考えています。 /public_html フォルダ (ドメインのルートディレクトリ) --index.php - ルートに置いたindex --_enフォルダ - 英語サイト --_jpフォルダ - 日本語サイト --jsフォルダ - 共通のjsスクリプト --cssフォルダ - 共通のcss --imgフォルダ - 共通のimg : その他 faviconやsitemapなど メインは日本語サイトにしたいので、例えば、 http://hoge.com とURLに打ち込んだときは、_jp配下のindex.phpが表示される。 http://hoge.com/_enと打ち込んだときは、_en配下のindex.phpが表示される。 以下、 http://hoge.com/categoryとしたら、 _jp配下のcategory.php が表示される。 このような感じの設定ができたらと思っています。 サーバはnginxで動かしています。 詳しい方、よろしくお願いいたします。 ちなみに、 現在のnginx.confは、以下のようにしていて、ルートディレクトリ直下に、phpをずらずら並べています。(抜粋) ``` server { listen 80 default_server; listen [::]:80 default_server; server_name urbanmeetup.tokyo; root /usr/share/nginx/urbanmeetup/public_html; location / { index index.html index.php index.html; try_files $uri $uri.php $uri.html $uri/ 404.html=404; gzip_static on; if ( -f $request_filename.php ) { rewrite ^(.*)$ $1.php; } } location ~ \.php$ { root /usr/share/nginx/urbanmeetup/public_html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ```
回答: `.php`を補完してやる方法と、URL ルーティングを使用する方法の2種類があります。 それぞれの方法を確認すれば、やりたいことにあった方法が見つかると思います。 **追記** `.php`の補完 ========= nginx の設定で対応します。 実際の設定は要件次第ですが、ざっくり以下のような流れが参考になるかと。 ・与えられた URI に`.php`を足す ・そのファイルが有るかどうかの確認 ・あれば、php ファイルとして認識し、php ファイルとして処理 参考リンク Module ngx_http_rewrite_module URLルーティングで対応 ============ こちらは php で仕組みを作り対応します。 *nginx の設定も必要です。 ・nginx に、全リクエストを index.php + パラメータとして扱うよう設定します。 (各種フレームワークの設定や WordPress の設定を参考にしてください) ・index.php でパラメータに従って必要なファイルを実行する仕組みを構築 参考リンク PHPで高速に動作するURLルーティングを自作してみた