(Debian7.4 , Apache2.2.22)
http://xxx.xxx.xxx.xxx/index.php?pid=001
http://xxx.xxx.xxx.xxx/index.php?pid=002
というような、GETをURLの一部として送るのは長いので、
http://xxx.xxx.xxx.xxx/001.html
http://xxx.xxx.xxx.xxx/002.html
のように書き換えるのが、mod_rewriteだ。
http://xxx.xxx.xxx.xxx/index.php?aaa=001&bbb=002&ccc=003
↓
http://xxx.xxx.xxx.xxx/aaa_001-bbb_002-ccc_003.html
等、パラメーターの多い、複雑なURLを短くすることが可能。
この、URLの書き換えを行うには、
① mod_rewriteの読み込み
と
② .htaccessの使用許可
の両方が必要。
レンタルサーバーでは多くの場合、これらが最初から有効となっているので、書換規則を.htaccessに書けば終了だが、自分で立てた場合は両方とも無効になっていることが多い。
■ ① mod_rewriteの読み込み ■
Apacheの設定ファイルは
/etc/apache2/apache2.conf
にあるが、その下の
/etc/apache2/mods-available
に
rewrite.load
がある。
これがrewriteモジュール。
Apacheの起動時に、これがloadされていない場合があるので、loadするように設定する。
なお、rewrite.loadの中身は、おなじみの(笑)
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
である。
まず、コマンドで
apache2ctl -M
とし、mod_rewriteがロードされているか確認。
root@debian:~# apache2ctl -M
—–
apache2: Could not reliably determine the server’s fully qualified domain name, using xxx.xxx.xxx.xxx for ServerName
Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
reqtimeout_module (shared)
setenvif_module (shared)
status_module (shared)
Syntax OK
root@debian:~#
—–
結果にrewrite_moduleがないので、入っていないようだ。
よって、入れる必要がある。
mod_rewriteを有効化する。
a2enmod rewrite
—–
root@debian:~# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
service apache2 restart
root@debian:~#
—–
Apacheの再起動が必要。
/etc/init.d/apache2 restart
そして再度apache2ctl -Mを実行。
apache2: Could not reliably determine the server’s fully qualified domain name, using xxx.xxx.xxx.xxx for ServerName
Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
status_module (shared)
Syntax OK
root@debian:~#
—–
となり、rewrite_moduleが追加されたことが確認できる。
なお、ロードされているモジュールは、PHPが使える環境であれば
<?PHP echo phpinfo(); ?>
でも確認可能。
PHP Credits>Configuration>apache2handler
なお、モジュールを無効化するには、
a2dismod rewrite
とし、Apacheを再起動すればよい。
■ ② .htaccessの使用許可 ■
次に、URLの書き換え。
URLの書き換えは.htaccessで行うが、.htaccessが使用できない(読込が許可されていない)設定になっている場合がある。
その場合は、
/etc/apache2/sites-available
にあるdefaultを、以下のように書き換える。
(前)
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
(後)
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride FileInfo Options
Order allow,deny
allow from all
</Directory>
そして、Apacheを再起動。
.htaccessに
RewriteEngine on
RewriteRule ~~~
RewriteRule ~~~
を書いて、書き換えが成功しているか確認する。
RewriteRuleの書き方については、ここでは割愛する。