読者です 読者をやめる 読者になる 読者になる

fuelのhtaccessを読んだ

毎回ググってるけど、いつになったらrewrite覚えるの?(‾◡◝)
という心の声が聞こえたので、覚えないためにここに書きます。

<IfModule mod_rewrite.c>	
    # URL書き換えを許可
    RewriteEngine on

    # URL書き換え後のベースになるパス (指定しなかったらhtaccessの物理パス)
    RewriteBase /sample/public

    # rewriteその1
    # RewriteRule <置換前> <置換後>     
    # .htaccessがあるディレクトリへのアクセスを{RewriteBase}/index.phpに飛ばす。
    # [L]があるので、マッチしたら、これより下のルールは適用せずに終了する
    RewriteRule ^(/)?$ index.php/$1 [L] 


    # rewriteその2
    # RewriteCond ルールが適用される条件を追加する。
    # (ファイルが存在する場合はすぐ下のルールを適用しない)
    RewriteCond %{REQUEST_FILENAME} !-f
    # (ディレクトリが存在する場合はすぐ下のルールを適用しない)
    RewriteCond %{REQUEST_FILENAME} !-d 
    # ~~にアクセスが来たら{RewriteBase}/index.php/~~に書き換え。
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

動きを大体まとめると
localhost/sample/public/index.phpのような構成だとしたら

  • rewriteその1

localhost/sample/へのアクセスが sample/public/index.phpに書き換えられる。

  • rewriteその2

localhost/sample/foo/barへのアクセスがsample/public/index.php/foo/barに書き換えられる。

FuelのURL構造、localhost/index.php/<コントローラ>/<メソッド>/<引数1>/・・・を頭に入れておくと少しわかりやすくなる。
実際にはlocalhost/<コントローラ>/<メソッド>/<引数1>/・・・のようにアクセスしたい。
今回はサブディレクトリsampleにFuelを入れているので
localhost/sample/index.php/<コントローラ>/<メソッド>/<引数1>/・・・に
localhost/sample/<コントローラ>/<メソッド>/<引数1>/・・・
の形でアクセスできるように設定している。

参考

» [.htaccess] リライト(サイトの移転・wwwの有無を統一・アクセス制限) AIDREAM
RewriteCond %{REQUEST_FILENAME}の衝撃 - 雑記 - Yahoo!ブログ
Apache: RewriteBaseは書き換え後のパスのベース - log.nissuk.info
最後の参考サイトに

RewriteRuleに渡ってくるパスがスラッシュから始まるのはhttpd.confにRewriteRuleを書いた時だけで、.htaccessに書いた時は.htaccessが置いてあるディレクトリからの相対パス(上記例だと abc/def.html。RewriteLogで「strip per-dir prefix」と書かれている箇所)がRewriteRuleに渡ってくるため最初のスラッシュがマッチしなくなります。

と書いてあって、rewriteその1に関して?あるからいいけど事実上"/"にマッチするケースはないのではないか説が自分の中にありますが、どうなんでしょうか。