apache php で rewrite がきかない。
apache 2.4.6
PHP 5.4.165
で動いているシステム(CakePHP)を同じバージョンを使用している、別のサーバに移行したのですが、
rewriteがきいてないとおもわれる現象
http://localhost/xxx/yyy
でアクセスすると、
The requested URL xxx/yyy was not found on this server.
となってしまいます。
httpd.conf に
LoadModule rewrite_module modules/mod_rewrite.so
を加えるだけでよいとおもうのですが、phpにも、なにか設定が必要でしょうか?
httpdを何度か再起動すると
error_log:[Sun Jan 07 21:10:41.810355 2018] [so:warn] [pid 6379] AH01574: module rewrite_module is already loaded, skipping
が出ているので、rewrite のモジュールはhttpdに反映されているとおもいます。
.htaccess はcakePHPで提供されるもので、私が意図的に編集、作成したものでなく中身はわかりませんが、移行されています。
調査のために、
RewriteLog /tmp/rewrite.log
RewriteLogLevel 9
という記述をhttpd.conf
以下のように、include に続いて追記
Include conf.modules.d/*.conf
RewriteLog /tmp/rewrite.log
RewriteLogLevel 9
すると
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
1月 08 01:06:33 testhost httpd[6808]: [Mon Jan 08 01:06:33.610291 2018] [so:warn] [pid 6808] AH01574: module r
1月 08 01:06:33 testhost httpd[6808]: AH00526: Syntax error on line 59 of /etc/httpd/conf/httpd.conf:
1月 08 01:06:33 testhost httpd[6808]: Invalid command 'RewriteLog', perhaps misspelled or defined by a module
1月 08 01:06:33 testhost systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
1月 08 01:06:33 testhost kill[6809]: kill: cannot find process ""
1月 08 01:06:33 testhost systemd[1]: httpd.service: control process exited, code=exited status=1
1月 08 01:06:33 testhost systemd[1]: Failed to start The Apache HTTP Server.
-- Subject: Unit httpd.service has failed
となり、apacheを再起動できないので、はずしています。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
つLogLevel info rewrite:trace8
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
そのディレクトリで .htaccess が有効になっているかどうか確かめてください。
また .htaccess の中身も間違いないかどうか確認してください。
何も書かれていないのでこちらでは確認できません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
Invalid command 'RewriteLog', perhaps misspelled or defined by a module
ということから、
LoadModule rewrite_module modules/mod_rewrite.so
が失敗していると思われます。
また、それと矛盾するのですが、
module rewrite_module is already loaded, skipping
ということから、おそらくconf.modules.d/*.conf
に、LoadModule rewrite_module modules/mod_rewrite.so
の記述がすでにあるのではないでしょうか。
あと、.htaccess
の、<IfModule mod_rewrite.c>
と</IfModule>
は削除して下さい。
この記述は、「LoadModule rewrite_moduleが失敗していてもエラーにしない」ということなので、今回のようなケースではエラー切り分けのためには無い方が良いです。
ちょっと状況が不可思議ですが、
1.httpd.conf
のLogLevel ~
の行をLogLevel debug
に修正
2.conf.modules.d/*.conf
に、LoadModule rewrite_module~
があれば、自分で記述したLoadModule rewrite_module~
を削除
3..htaccess
の、<IfModule mod_rewrite.c>
と</IfModule>
の行を削除
して、どんなエラーが出るか確認して下さい。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 91.07%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2018/01/08 06:58
追記して、apacheを再起動して、実行してもログ内容は以下のとおりで、
とくにrewriteに関する情報は増えませんね、
/var/log/httpd下に他にファイルもできてないし、
rewriteそのものがきてないでしょうか?
AH01574: module rewrite_module is already loaded, skipping
は、この再起動でも出ていますが
access.log
192.168.0.2 - - [08/Jan/2018:06:50:14 +0900] "GET /xxx/yyy HTTP/1.1" 404 215 "-"
error.log
[Mon Jan 08 06:50:14.411494 2018] [core:info] [pid 6829] [client 192.168.0.2:57471] AH00128: File does not exist: /opt/htdocs/xxx/yyy
2018/01/08 07:13
差し支えなければ具体的な記述を貼って下さい。
2018/01/08 07:40
rewriteは最下部一行追加
# LoadModule foo_module modules/mod_foo.so
LoadModule rewrite_module modules/mod_rewrite.so
ログは最下部一行を追記
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
LogLevel info rewrite:trace8
.htaccessは
[root@test xxx]# pwd
/opt/htdocs/xxx
[root@test xxx]# ls -l .htaccess
-rw-rw-r-- 1 apache apache 183 11月 27 2011 .htaccess
[root@test xxx]# cat .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
</IfModule>
です。
2018/01/08 08:08
2018/01/08 12:05
otnさんのレス含め、変更をいろいろ試したところ、
AllowOverride None
となっていたのを
AllowOverride All
とすることで解決しました。
移行前の環境(OS,Apach,PHPのバージョンはまったく同じ)では、
AllowOverride None
で動いているのですが、、、
なお、
module rewrite_module is already loaded, skipping
ということから、おそらくconf.modules.d/*.confに、LoadModule rewrite_module modules/mod_rewrite.soの記述がすでにあるのでは
は、そのとおりでした。httpd.conf側の記述を削除しました。
どうも、ありがとうございました。
2018/01/08 17:38
回答のリンク先くらい読みましょう。
2018/01/08 22:17
あ、そうですね、しかし、紹介されたHPにはパーミッションに関する記事はないですよね、
他の
https://htaccess.cman.jp/movement/
などをみて644だからOKとおもっていましたが、違いました。
問題の現象はおこっていませんが、修正しておきます。
2018/01/08 22:21
今回の問題点と解決法そのものずばりが書いてありますね。
パーミッションどうこうはあなたが言ったことで、まあトンチンカンなことを言うなという…そこまで解説させますか?