質問: htaccessにて下記制御を入れているサイトにて、 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond $1 !^(index\.php|images|scripts|) RewriteRule ^(.*)$ /index.php/$1 [L] https://*.jp/test/(testは存在しないディレクトリ)等のURLを入力された場合でも、 https://*.jp/index.phpを表示させるようにする設定は可能なのでしょうか? おそらく、上記設定のままだと https://*.jp/test/index.phpとなってしまう認識です。 ご教授よろしくお願いいたします。
回答: > > https://*.jp/test/(testは存在しないディレクトリ)等のURLを入力された場合でも、 > > https://*.jp/index.phpを表示させるようにする設定は可能なのでしょうか? > > おそらく、上記設定のままだと > > https://*.jp/test/index.phpとなってしまう認識です。 > > > https://*.jp/test/ → https://*.jp/test/index.phpとリライトはされません。 下記にすべてのリライトを解説してみたので参考にしてみてください。 **RewriteCond %{REQUEST_FILENAME} !-f** **RewriteCond %{REQUEST_FILENAME} !-d** リライト条件:リクエストURLのファイル名(-f)かつ、ディレクトリ(-d)が存在しない場合 **RewriteCond $1 !^(index\.php|images|scripts|)** リライト条件:$1というリクエストURLが「index.php or images or scripts」ではない場合 ※上記は、条件がおかしいので常にTRUEになります **RewriteRule ^(.*)$ /index.php/$1 [L]** 上記リライト条件が`TRUE`(AND結合で上から順番に処理)の場合、すべてのリクエストURLを「/index.php/リクエストURL」にリライトして終了 **/test/ がリクエストURLの場合:** http://ドメイン/test/ → http://ドメイン/index.php/test/ 実際に「/test」ディレクトリが存在する場合は、リライト条件(`RewriteCond %{REQUEST_FILENAME} !-d`)が`FALSE`になりリライトは行われません。 最終的には下記でいかがでしょうか。`RewriteCond $1 !^(index\.php|images|scripts|)`これを「リクエストURLがindex.php,images,scriptsではない場合」と解釈すると下記のようになります。 ``` RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/(index\.php|images|scripts) RewriteRule ^(.*)$ /index.php/$1 [L] ``` ※`http://ドメイン/index.php/xxx`などのURLではアクセスできなくなります。