LoginSignup
21
20

More than 5 years have passed since last update.

リクエスト(URL文字列)を.htaccessでindex.phpにGETで渡してあげるやつ

Last updated at Posted at 2014-08-22

フレームワークとかなんとかPressでありがちな
リクエストされたURLを処理をする奴をメモしておく。
(リクエストルーターって言うらしいよ!)

今回は
http://example.com/alpha/bravo/charlie/
http://example.com/index.php?request=/alpha/bravo/charlie/ にして

array(3) {
  [0]=> string(5) "alpha"
  [1]=> string(5) "bravo"
  [2]=> string(7) "charlie"
}

にする一通り。


肝心のファイルはこれ。

.htaccess
<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteCond %{HTTP_HOST} ^www.example.com
  RewriteRule ^(.*)$ http://example.com/$1 [R=301,L,NE]

  RewriteCond %{REQUEST_URI} ![&]
  RewriteCond %{REQUEST_URI} !/$
  RewriteCond %{REQUEST_URI} !\.[^/\.]+$
  RewriteRule .* %{REQUEST_URI}/ [L,R]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule (.*) index.php/?%{QUERY_STRING}&request=$1 [L]

  RewriteCond %{THE_REQUEST} ^GET\ !-f
  RewriteRule ^(.*)index.php/?(.*)$ http://example.com/$1$2 [R=301,L,NE]
</IfModule>

よく使うので書いてますがここはwwwの有り無しを揃える為なので要らないです。

RewriteCond %{HTTP_HOST} ^www.example.com
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L,NE]

これもwwwと同じような理由で、末尾に/ (スラッシュ)がない時に付けてあげてURLを揃えてる。

RewriteCond %{REQUEST_URI} ![&]
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.[^/\.]+$
RewriteRule .* %{REQUEST_URI}/ [L,R]

大事なのはここ

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/?%{QUERY_STRING}&request=$1 [L]
  • ファイルをリクエストしている場合は処理しない
  • /(ルート)より後ろを全部$1に渡してる
  • ?%{QUERY_STRING} もポイント。元から付いてるGETを改めて付け直してる。

http://example.com/alpha/?bravo=charlie のような時に
http://example.com/index.php?bravo=charlie&request=/alpha/ としてくれる


PHP で $_GET['request'] を処理する

これだけ。

index.php
$request = array_values(array_filter(explode('/', $_GET['request']), "strlen"));
  • / (スラッシュ)でexplodeして配列化
  • URL構造の関係上、空配列が出来るのでarray_filterで整理

以上!

21
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
20