kamenokoki.com

ローカルで内部転送テストをしたいときのApacheの設定

Posted:  Last Update:

サイトの開発をしている時に、ローカルで短縮URL(パーマリンク、ショートリンク)のテストをしたい場合がある。
しかし、Apacheの基本設定のままだと「mods_rewrite」を使った内部転送はうまくいかない。Internal Server Errorが表示されてしまったり、表示したいページが表示できなかったりする。
この記事では、短縮リンクのテストをローカルで行うために筆者が行った設定を紹介する。
短縮URL(パーマリンク)や内部転送で「Internal Server Error」が発生したり、短縮URLでリンクする階層がおかしくなった際にも参考にしてほしい。

「短縮URL」「内部転送」とは

ここでは「短縮URL」と呼ぶが、「パーマリンク」や「短縮リンク」「ショートリンク」という言い方もされる。
たとえば、このページのURL「https://kamenokoki.com/article/20200927」が短縮URLだ。実際には「https://kamenokoki.com/index.php?category=article&filenum=20200927」という長いURLのページ内容が表示されている。

「内部転送」とは、簡潔に言うと、ブラウザのアドレスバーに短縮URLを表示したままの状態で、元の長いURLのページを表示させることだ。.htaccessとPHPの制御で短縮URLや内部転送は実現している。

短縮URLと内部転送の制御を行っている.htaccessはApacheで動いている。ローカルでテストをする際、Apacheの基本設定のままでは短縮リンクに対応した機能が動いていない。ローカルでテストを行う場合には下に紹介する設定を忘れずにしておこう。

なお、wwwあり/なしの切り替えや、認証サイト(https) のテストはこの設定ではできないのであらかじめ注意されたい。

サイトの専用ホストを準備しよう

サイトのテストをする際には必ず専用のホストを立てよう。これは、レンタルサーバーと同じ環境にするという意味でも有効だ。また、ローカル環境でファイルの階層が原因で発生するエラーが回避できる。
1つのサイトにつき、一つのホストを立てよう。複数サイトがある場合には、複数のホストを立てておこう。

最初にApacheのフォルダーを開き、「conf」フォルダーから「httpd.conf」を開く。
(Apacheをインストールした際に設定を行ったと思うのでファイルの開き方などは割愛する。)

「httpd.conf」の先頭に次のようにホストをつけたそう。
「#http://localhost:」「Listen」「<VirtualHost localhost:」の番号は全て同じにすること。
「 DocumentRoot "」はサイトのファイルを置いているファイルを指定する。

#http://localhost:8001/
Listen 8001
<VirtualHost localhost:8001>
DocumentRoot "C:/files/website" ←サイトのファイルを置いているフォルダを指定
RewriteEngine On
RewriteOptions Inherit
</VirtualHost>

「httpd.conf」の編集が終わったら、Apacheを再起動することを忘れずに。新たなホストには「http://localhost:8001/index.html」「http://localhost:8001/index.php」などでブラウザから接続できる。

上記を複製して、番号を「8002」「8003」などにそれぞれ変えることで、ホストを増やすことができる。

「mods_rewrite」を動かせるようにしよう

短縮URL(パーマリンク)と内部転送は、Apacheの「mod_rewrite」という機能で行う。Apacheの基本設定のままではこの機能がオフになっているので、オンにする必要がある。
内部転送のテストをローカルで行った際に「Internal Server Error」が表示されるようなら、この設定がオフになっている可能性が高い。

Apacheのフォルダーを開き、「conf」フォルダーから「httpd.conf」を開く。
ファイル内で下記のコードを探し、先頭の「#」を消してファイルを保存しよう。

#LoadModule rewrite_module modules/mod_rewrite.so

LoadModule rewrite_module modules/mod_rewrite.so

保存した後はApacheを再起動することを忘れずに。再起動しないと変更が反映されない

filesをアクセス禁止にしている場合「mod_access_compat」も有効化

内部転送と同時に設定をすることがある「ファイルのアクセス禁止」のせいで「Internal Server Error」が発生する場合もある。
ファイルのアクセス禁止とは、以下のような設定だ。

<Files ~ "(\.txt|\.csv)$">
deny from all
</Files>

ファイルのアクセス禁止をしていて、「internal Access Error」が発生する場合には、「mod_access_compat」が無効になっている可能性がある。
Apacheのフォルダーを開き、「conf」フォルダーから「httpd.conf」を開き、ファイル内の下記のコードを探し、先頭の「#」を消してファイルを保存しよう。

#LoadModule access_compat_module modules/mod_access_compat.so

LoadModule access_compat_module modules/mod_access_compat.so

エラーが出る時は専用ホストの設定を今一度見直そう

専用ホストを以前から立ち上げている方で、上記の「サイトの専用ホストを準備しよう」の設定を飛ばした方には、今一度ホストの設定を見直してほしい。特に「RewriteEngine On」と「RewriteOptions Inherit」は忘れずに設定したい。

Apacheの「httpd.conf」でホストの設定を確認しておこう。
「RewriteEngine On」を設定していないと「mods_rewrite」が動かない可能性がある。「Internal Server Error」の原因となってしまう。
また、「RewriteOptions Inherit」は上位階層にある.htaccessの設定を受け継ぐために必須だ。レンタルサーバーでも設定されている。「RewriteOptions Inherit」が設定されていないと、短縮URLのリンクをクリックした際に参照する階層がおかしくなるなどの問題が発生する。

ホスト設定のサンプルを改めて記載するのでご自身の設定と比較してほしい。詳細は上記「サイトの専用ホストを準備しよう」に詳しく紹介している。

#http://localhost:8001/
Listen 8001
<VirtualHost localhost:8001>
DocumentRoot "C:/files/website"
RewriteEngine On
RewriteOptions Inherit
</VirtualHost>

設定を直した時にはApacheの再起動も忘れずに。

まとめ

今回は、短縮URLや内部転送のテストをする際に、筆者が行った設定を紹介した。
紹介した以外にも、設定によっては短縮URLや内部転送が動かないこともあるだろう。.htaccessに書いた設定が、Apacheの「httpd.conf」で有効になっているか確認することを忘れないでおきたい。

記事をシェアする

亀の子に連絡

ランキング参加中!ぽちっとしてね

F2cランキングアイコン 人気ブログランキング ブログランキング・にほんブログ村へ

RELATED

環境設定 

広告