Skip to content
Menu
MyProjectWEB
  • PCが起動しないとき
  • PC全般カテゴリ
  • windowsカテゴリ
  • Linuxカテゴリ
  • サーバー・ネットワーク
MyProjectWEB

【apache】mod_rewriteの設定について

Posted on 2018年8月6日2018年11月15日 by naoki

【apache】mod_rewriteの設定について

apache2.0でmod_rewriteを自宅のサーバーで動作させようとしたときに躓いたことをまとめてみました。

【基本的なこと】

mod_rewriteとはapacheの機能の一つでURLのリダイレクトや書き換え、偽装なんかをすることが出来ます。
apacheの設定ファイルhttpd.confに記述するか、適応させたいディレクトリに.htaccessを設置してそこにルールを記述知ることで動作させることができます。

[apacheの設定]

apacheでmod_rewriteが許可されていないとhtaccessに書こうがhttpd.confに書こうが動作はしません。
httpd.confに以下の記述があることを確認しましょう。

LoadModule rewrite_module modules/mod_rewrite.so

コメントアウトされている場合は頭の#を削除します。
記述が見つからない場合は書き足しましょう。
(修正が終わったらhttpdの再起動を忘れずに)

[ディレクティブ]

RewriteEngine
mod_rewriteを動作させるかさせないかを設定する。
RewriteBase
基本となるディレクトリを記述する。
RewriteCond
rewriteするにあたっての条件を記述
RewriteRule
rewriteのルールを記述。
RewriteLogLevel
rewriteにおけるログの出力レベルを設定する。
RewriteLog
ログの出力先を指定する。

ログの出力先とレベルの設定はhttpd.confに記述するようにしましょう。

httpd.confに以下の記述
RewriteLogLevel 9
RewriteLog /var/log/httpd/rewrite.log

携帯電話からのhttp://p-graphic.servebeer.com/test/index.htmlというアクセスをhttp://p-graphic.servebeer.com/mobile/index.htmlへリダイレクトさせる。
httpd.confに記述する場合
<Directory /動作させたいディレクトリ >
Options FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^(DoCoMo|KDDI|UP\.Browser|J-PHONE|Vodafone|MOT-|SoftBank) [NC]
RewriteRule /test/index.php$ /mobile/index.html [R,L]
.htaccessに記述する場合
RewriteEngine On
RewriteBase /test
RewriteCond %{HTTP_USER_AGENT} ^(DoCoMo|KDDI|UP\.Browser|J-PHONE|Vodafone|MOT-|SoftBank) [NC]
RewriteRule ^index.php$ /mobile/index.html [R,L]

【トラブルシューティング】

mod_rewriteが動かなかったり思ったように動作しないときは兎に角ログを確認しましょう。

ログの出力先とレベルの設定はhttpd.confに記述するようにしましょう。

httpd.confに以下の記述
RewriteLogLevel 9
RewriteLog /var/log/httpd/rewrite.log

httpd.confでmod_rewriteが動作しない。

  • LoadModule rewrite_module modules/mod_rewrite.soをhttpd.confに記述しましょう。
  • LoadModule rewrite_module modules/mod_rewrite.soがコメントになっている場合は頭の#を削除しましょう。
  • rewriteルールを記述する場所が間違っていませんか?
  • <Directory /動作させたいディレクトリ >の中にちゃんと記述されていますか?

htaccessでmod_rewriteが動作しない。

  • htaccessが有効になっていますか?
  • RewriteBase が正しく設定されていますか。

Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden:
とエラーが出てしまい、mod_rewriteが適応されるディレクトリ以外のファイルへのアクセスができなくなってしまう。

  • mod_rewriteを適用するディレクトリにOptions FollowSymLinksと追記することでこのエラーは回避できます。
  • <Directory /動作させたいディレクトリ >の中にmod_rewriteの設定と共にOptions FollowSymLinksも記述しましょう。

RewriteCond を[OR]オプションを付けて続けて書くと指定したUA以外のブラウザからアクセスしてもリダイレクトされてしまう。

例)

RewriteCond %{HTTP_USER_AGENT} DoCoMo [NC,OR]
RewriteCond %{HTTP_USER_AGENT} J-PHONE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Vodafone [NC,OR]
RewriteCond %{HTTP_USER_AGENT} SoftBank [NC,OR]
RewriteCond %{HTTP_USER_AGENT} MOT- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} UP.Browser [NC,OR]
RewriteCond %{HTTP_USER_AGENT} KDDI [NC,OR]
RewriteCond %{HTTP_USER_AGENT} WILLCOM [NC,OR]
RewriteRule ^index.php$ /mobile/index.html [R,L]

ではなく、こうしてひとつずつ[L]で区切ることで思い通りの動作をするようになる場合があります。

RewriteCond %{HTTP_USER_AGENT} DoCoMo [NC]
RewriteRule ^index.php$ /mobile/index.html [R,L]
RewriteCond %{HTTP_USER_AGENT} J-PHONE [NC]
RewriteRule ^index.php$ /mobile/index.html [R,L]
RewriteCond %{HTTP_USER_AGENT} Vodafone [NC]
RewriteRule ^index.php$ /mobile/index.html [R,L]
RewriteCond %{HTTP_USER_AGENT} SoftBank [NC]
RewriteRule ^index.php$ /mobile/index.html [R,L]
RewriteCond %{HTTP_USER_AGENT} MOT- [NC]
RewriteRule ^index.php$ /mobile/index.html [R,L]
RewriteCond %{HTTP_USER_AGENT} UP.Browser [NC]
RewriteRule ^index.php$ /mobile/index.html [R,L]
RewriteCond %{HTTP_USER_AGENT} KDDI [NC]
RewriteRule ^index.php$ /mobile/index.html [R,L]
RewriteCond %{HTTP_USER_AGENT} WILLCOM [NC]
RewriteRule ^index.php$ /mobile/index.html [R,L]

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

カテゴリー

  • linuxでトラブルが発生した時の対処法
  • phpの小技
  • windowsでトラブルが発生した時の対処法
  • サーバーでトラブルが発生した時の対処法
  • パソコンが起動しないときの対処法
  • パソコン全般項目

タグ

apache backup bios centos disc disk error Fedora gcc Guest Additions Linux make mount Movabletype movable type mt mt-tb.cgi php Vine Linux virtual virtualbox windows アップグレード インストール スパム セーフモード トラブルシューティング ネットワーク ノード パソコン ビープ音 ブルースクリーン モジュール モバイル リダイレクト ループ 修復 入らない 回復コンソール 画面が真っ黒 真っ黒 起動しない 電源 青い画面 黒い画面

カテゴリー

  • linuxでトラブルが発生した時の対処法
  • phpの小技
  • windowsでトラブルが発生した時の対処法
  • サーバーでトラブルが発生した時の対処法
  • パソコンが起動しないときの対処法
  • パソコン全般項目
©2025 MyProjectWEB | Powered by Superb Themes
モバイルバージョンに移動