サポート » 使い方全般 » ダッシュボード内のリンク、ボタン押下時に404エラーが発生

  • 解決済 ry0ta.ma2da

    (@ry0tama2da)


    現在、WPを利用して社内Blogサイトを構築していますが、
    以下の現象が発生し、この解決策が見つかっていません。
    ご存知の情報がありましたら、アドバイスをよろしくお願いします。

    【問題発生中のBlogサイトの情報】
    ドメイン(仮):hogehoge.jp
    WPを配置したディレクトリ名:eblog
    構築中のBlogにアクセスする場合のURL:http://hogehoge.jp/eblog/

    【環境情報】
    WordPressのバージョン:3.3.1
    使用しているPlugin名とバージョン:Akismet(2.5.5)、Hello Dolly(1.6)、Subscribe2(7.2)、WP Multibyte Patch(1.5.1)、WP Super Cache(1.0)
    テーマ名とバージョン:Twenty Eleven 1.3
    OSバージョン:CentOS 5.7
    Apacheバージョン:2.2.21
    PHPバージョン:5.3.3
    MySQLバージョン:5.5.20

    【事象概要】
    1. ダッシュボード内の一部のメニューで、変更を保存実行時やリンク押下時に404エラーが発生
    2. 投稿時にメディアを追加からアップロード/挿入で、コンピュータから以外のタブリンクを押下時も404エラー発生

    【事象の発生方法(上記事象概要の1の場合)】
    管理者権限でダッシュボードにログイン
    →設定
    →一般(※投稿設定、表示設定、ディスカッション、メディア、プライバシーでも同じ現象が発生
    パーマリンク設定では404は発生しないが「.htaccess を更新する必要があります」と表示)

    ▼IE8の場合
    変更画面(一般設定)のURL
    http://hogehoge.jp/eblog/wp-admin/options-general.php

    変更を保存ボタン押下

    画面表示内容:
    「画面タイトル」HTTP 404 未検出
    「ページ表示」Web ページがみつかりません

    (変更を保存ボタン押下後に)アドレスバーに表示されるURL:
    http://hogehoge.jp/eblog/wp-admin/options.php
    ページのプロパティに表示されるURL
    res://ieframe.dll/http_404.htm#http://hogehoge.jp/eblog/wp-admin/options.php

    ▼Google Chrome(17.0.963.56 m)の場合
    変更画面(一般設定)のURL
    http://hogehoge.jp/eblog/wp-admin/options-general.php

    変更を保存ボタン押下

    画面表示内容:
    「画面タイトル」404 Not Found
    「ページ表示」Not Found The requested URL /wp-admin/options-general.php was not found on this server.

    (変更を保存ボタン押下後に)アドレスバーに表示されるURL:
    http://hogehoge.jp/wp-admin/options-general.php?settings-updated=true

    【補足】
    ・全Plugin停止→変化なし
    ・ブラウザキャッシュクリア→変化なし
    ・同様の質問をフォーラム内、他サイトで調査→該当するような事象発見できず

    Google Chromeの場合、処理実行後のURLから「eblog」が消えていますが、なぜ消えるのか分かっていません。
    もちろん実際に上記ファイル(options-general.phpなど)は存在します。

    サーバ側の設定の問題なのか、パスを出力するPGMをカスタマイズする必要があるのか、
    何かご存知の情報がありましたら、アドバイスをお願いします。
    ※なお、メニューによって異なりますが、一般設定の場合、404は発生しますが変更内容は反映されます。

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • nobita

    (@nobita)

    こんにちは ry0ta.ma2daさん

    パーマリンク設定では404は発生しないが「.htaccess を更新する必要があります」と表示

    ここのところが気になりますが、
    .htaccessの更新を行っていますでしょうか?

    .htaccessの書き込みが制限されている場合 「更新をする必要があります」という表示が出て、変更する.htaccessの内容が表示されると思いますが、

    この時に、.htaccessの変更を行わないと、mod_rewriteの設定がおかしくなってしまうことがあるかもしれません、そのあたりをチェックしてみてはいかがでしょうか?

    トピック投稿者 ry0ta.ma2da

    (@ry0tama2da)

    nobitaさん、ご回答ありがとうございます。

    .htaccessの更新を行っていますでしょうか?

    更新ボタン押下後、画面下部に表示されるコードを.htaccessに追記しましたが、
    同じメッセージが表示され、404も解消されず、変化なしでした。

    この.htaccessの問題に関しては、「http://ja.forums.wordpress.org/topic/808」あたりを参考に
    .htaccessのパーミッションを「644 → 666」に変更したところ、
    メッセージは「パーマリンク構造を更新しました。」となりました。
    ただ、他設定メニューの404エラーは変化無しでした。

    現在404エラーが発生している設定メニュー系と投稿画面のメディアを追加のタブリンクでは、
    以下のように、
    http://hogehoge.jp/eblog/wp-admin/…..
    となってほしいリンク先のURLが、リンク、ボタン押下前の画面のソース確認時点で
    http://hogehoge.jp/wp-admin/…..
    というようにWPソースを配置しているディレクトリ名部分のパスが
    出力されていないことから、そんなパスは存在しない(=404)となっており、
    パーミッションは関係ないのかな、と今のところ考えています。

    ただ、WPやパーミッションについて、まだよく分かっていないため確認・質問させて頂きたいのですが、
    wp-adminディレクトリとその配下のファイル群のパーミッションはどのように設定されていることが望ましいのでしょうか?

    現在は以下の状態です。

    ▼対象:パーミッション/所有者/グループ
    ディレクトリ:drwxr-xr-x(766)/nobody/apache
    ファイル:-rw-rw-r–(664)/nobody/apache

    wp-adminディレクトリについて、WP CODEXのファイルパーミッションの変更の要件は満たしていると思っているのですが、、。
    httpd.conf内のドキュメントルートの設定とか、そもそも全く別問題なのかもしれません。

    度々で申し訳ありませんが、何かご存知の情報がありましたら、アドバイスをよろしくお願いします。

    nobita

    (@nobita)

    こんにちは

    ちょっと、あてずっぽになってしまいますが
    以前に、パーマリンクの設定を変更して、.htaccessの変更を行わなかったという事に
    思いあたりがあるなら、

    パーマリンクの設定を、デフォルトに戻してみてください。

    だめなら、.htaccessを貼り付けてみてください。

    CyberCypher

    (@cybercypher)

    横槍失礼します
    htaccessの書込み許可がされていないとパーマリンク設定を更新したときに更新できず
    上記のような更新が必要ですと表示されます
    パーマリンク設定をやり直すか元に戻して設定し直した方がいいです

    あと例外としてhtaccessの拡張子を間違って付けている場合もアクセスできなくなってしまうので気をつけて下さい

    トピック投稿者 ry0ta.ma2da

    (@ry0tama2da)

    nobitaさん、CyberCypherさん
    アドバイスありがとうございます。

    ・パーマリンクの設定を、デフォルトに戻してみてください。
    ・パーマリンク設定をやり直すか元に戻して設定し直した方がいいです

    パーマリンクの設定をデフォルトに戻してみても、.htaccessファイルを削除してみても
    404エラーは変化なしでした。

    なお.htaccessファイルは以下の状態です。
    ▼対象:パーミッション/所有者/グループ
    .htaccess:-rw-rw-rw-(666)/root/root

    ※もともとパーマリンクの設定を変更していた経緯は、
    サイトの表示遅延対策として「WP Super Cache」をインストールし、
    このPluginの設定を変更しようとメニューにアクセスすると
    「パーマリンク構造エラー」となったことから、設定を数字ベースに変更していました。

    だめなら、.htaccessを貼り付けてみてください。

    WPインストール時点では.htaccessは存在していませんでした。
    Basic認証導入とパーマリンク変更対応のために作成した.htaccessの内容は以下の通りです。

    ### Basic認証設定のために.htaccess(と.htpasswd)を新規作成 ###
    <Files ~ “^\.(htaccess|htpasswd)$”>
    deny from all
    </Files>
    AuthUserFile /var/xxx/yyy/eblog/.htpasswd
    AuthGroupFile /dev/null
    AuthName “Please enter your ID and password”
    AuthType Basic
    require valid-user

    ### パーマリンク設定変更で「.htaccess を更新する必要があります」対応、変更画面下部に出力されたコードをそのまま追加 ###
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /eblog/
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /eblog/index.php [L]
    </IfModule>

    あと例外としてhtaccessの拡張子を間違って付けている場合もアクセスできなくなってしまうので気をつけて下さい

    拡張子は問題ありませんでした。.htaccessをファイルごと削除しても、404エラーは解消されませんでしたので、.htaccessとは別の問題なのかと考えています。

    CyberCypher

    (@cybercypher)

    一度プラグインをオフにしてみることをお勧めします
    それでアクセスできるのならば未知のURLにプラグインがアクセスしている可能性があります

    nobita

    (@nobita)

    こんにちは

    .htaccess は、特におかしく感じませんね

    キャッシュが残っているって事はないですよね

    $url = admin_url();
    echo $url;
    $url = network_admin_url();
    echo $url;

    で、URLは正しく取得できていますか?

    トピック投稿者 ry0ta.ma2da

    (@ry0tama2da)

    CyberCypherさん、nobitaさん
    アドバイスありがとうございます。

    一度プラグインをオフにしてみることをお勧めします

    オフにしてみましたが、アクセスできませんでした。

    admin_url()とnetwork_admin_url()のURLは正しく取得できていますか?

    「admin_url()」「network_admin_url()」ともに
    「http://hogehoge.jp/eblog/wp-admin/」が取得されていました。
    これらは正しく動いている?と思われます。

    今回問題箇所の一つの
    一般設定画面(wp-admin/options-general.php)の変更を保存ボタンを押下すると、
    まず「options.php」に対してPOST、更新処理を行い、
    パラメータを付与して元の一般設定画面(wp-admin/options-general.php?settings-updated=true)に戻る流れのようですが、
    この「options.php」内で

    /**
     * Redirect back to the settings page that was submitted
     */
    $goback = add_query_arg( 'settings-updated', 'true',  wp_get_referer() );
    wp_redirect( $goback );
    exit;

    としている「$goback」を画面出力してみると
    「/wp-admin/options-general.php?settings-updated=true」
    が取得されていました。

    現状、ここまでしかコードを追えていないため、
    このadd_query_arg()の結果が正しいのか分かっていません。

    この時点で$gobackはこの結果でよいのか、それとも
    「http://hogehoge.jp/eblog/wp-admin/options-general.php?settings-updated=true」
    のように、完全なURLとしてドメイン+WPディレクトリ名まで取得できているべきなのか。

    正しければ、次はwp_redirect()の処理内の問題なのか何なのか、引き続き確認しようと思っています。

    もしお気づきの点がありましたら、ご指摘をお願いします。

    Hikari Aoi

    (@hikari-aoi)

    こんにちは。

    お役にたてるかわかりませんが、もしまだ未解決でしたら参考にしてください。

    書き込みを拝見するとLAMP環境の構築から行ったようですが、どうもApacheの設定の問題のような気がします。

    正常に運用出来ていた環境でパーマリンクを変えたら問題が発生したということであれば、下記は的外れですので無視してください。

    新規の環境を作成していて、まだ正常動作していないということであれば、お役にたてるかもしれません。

    以下、2点ほど気になること、ご確認ください。

    ・ファイルの所有者がnobody/apacheとなっていますが、ソースファイルからコンパイルインストールしたのでしょうか?mod_rewriteが使えるようにコンパイルされていますか?(yumインストールならデフォルトで使用できるようになっていると思います)

    ・httpd.confのAllowOverrideの設定はされていますか?Noneのままだと.htaccessによるOverrideがされません。

    参考リンク
    http://www.bruteberry.com/archives/2012/03/wordpress-install-404notfound.php
    http://www.adminweb.jp/wordpress/permalink/index2.html

    nobita

    (@nobita)

    こんにちは、

    テーマの、functions.phpで試してみました。

    関数の挙動は、以下のようになりました

    echo wp_get_referer();// http://www.examle.com/wp/wp-admin/

    $goback = add_query_arg( ‘settings-updated’, ‘true’, wp_get_referer() );
    http://www.examle.com/wp/wp-admin/?settings-updated=true

    wp_get_referer();が 取れていない?

    リライトルールを調べたいのであれば、一覧にするプラグインがあったのを思い出したので、お知らせしておきます

    AskApache RewriteRules Viewer 

    トピック投稿者 ry0ta.ma2da

    (@ry0tama2da)

    Hikari Aoiさん、nobitaさん
    アドバイスありがとうございます。

    どうもApacheの設定の問題のような気がします。
    新規の環境を作成していて、まだ正常動作していないということであれば、お役にたてるかもしれません。

    ダッシュボード内の設定関連メニューだけでなく、投稿時のメディア追加箇所でも発生していることから、
    私もApacheの設定ファイルなど全体に関わるところに問題がある気がしています。

    インストール完了時点から既にこの状態(=404エラー)で、未解決のままのため、
    インストールからその後の各サーバ上の設定がWP用に正しくできていない部分があるのかもしれません。

    LAMP環境にWPをインストールする際の参考サイトなどご存知でしたら教えて頂けないでしょうか?
    Linuxを扱うこと自体、今回が初で、色々なサイトを参考にトライアンドエラーを繰り返したため、序盤の設定でどこをどう変えたか・・・かなり不安です。
    現在、リリースしているサイトではないため、(根本的な解決にはなりませんが)全て最初からインストールも一つの方法かと考えています。

    ファイルの所有者がnobody/apacheとなっていますが、ソースファイルからコンパイルインストールしたのでしょうか?

    yumでインストールしました。

    mod_rewriteが使えるようにコンパイルされていますか?

    httpd.confの「oadModule rewrite_module modules/mod_rewrite.so」は
    コメントアウトされていないため大丈夫かと思います。

    httpd.confのAllowOverrideの設定はされていますか?Noneのままだと.htaccessによるOverrideがされません。

    WPインストールディレクトリは「AllowOverride All」で設定していますので、こちらも問題ないかと考えています。

    参考リンク内「httpd -Mコマンドでmod_rewriteがHTTPDに読み込まれているか確認しよう。」

    このコマンドをどのパスで実行したらよいかわからず、こちらは確認できませんでした。
    Apache再起動時と同じパスで「/etc/rc.d/init.d/httpd -m」なのかなと思いましたが、
    そんなオプションはない、というメッセージが出てしまいます。
    yumインストールの場合、パスをどのように指定して実行するかご存知でしょうか?
    少し調べたのですが、分かりませんでした。

    wp_get_referer();が取れていない?

    ご指摘の通り一般設定変更時に wp_get_referer() は、本来
    /eblog/wp-admin/options-general.php
    を返すはずが、
    /wp-admin/options-general.php
    という「/eblog」部分が取れていないまさにこの wp_get_referer() 部分が発生の原因のようです。

    function wp_get_referer() {
    	$ref = false;
    	if ( ! empty( $_REQUEST['_wp_http_referer'] ) )    // ←こちらの分岐を通過
    		$ref = $_REQUEST['_wp_http_referer'];
    	else if ( ! empty( $_SERVER['HTTP_REFERER'] ) )
    		$ref = $_SERVER['HTTP_REFERER'];
    
    	if ( $ref && $ref !== $_SERVER['REQUEST_URI'] )
    		return $ref;
    	return false;
    }

    ↑の $_REQUEST[‘_wp_http_referer’] が、
    プログラム内でどのような流れでどこから取得されているのか、
    私のPHPスキルが乏しく、一般設定部分のソース(※)が理解できていません。
    ※wp-admin/options-general.phpとoptions.php

    ソース改変が必要ということはないと思っているので、
    上述したようにサーバ側の設定部分が問題かとは思うのですが、
    それがどこかを特定するにあたり、この$_REQUEST[‘_wp_http_referer’]について、
    教えて頂けませんでしょうか?

    度々となり、申し訳ありませんが、よろしくお願いします。

    Hikari Aoi

    (@hikari-aoi)

    Apache再起動時と同じパスで「/etc/rc.d/init.d/httpd -m」なのかなと思いましたが、そんなオプションはない、というメッセージが出てしまいます。

    /etc/rc.d/init.d/httpdはhttpdの起動スクリプトですね。
    httpdはyumでインストールすると/usr/sbin/httpdにあります。
    httpd -MのMは大文字ですのでご注意ください。

    実行ファイルの場所はwhichコマンドで調べることが出来ます。
    「which top」「which php」などと入力するとパスが表示されると思います。

    CentOSのインストールからLAMP構築、WordPressの設定まで何度もやっていますが、Apacheの設定はAllowOverrideで.htaccessを許可するだけで動作します。(ディレクトリ設定は別)

    AllowOverrideはhttpd.confの中で設定されている部分が数か所あります。
    それらが互いに矛盾した内容になっていると、思った通りの動作になりません。

    トライアンドエラーで何度も変更を重ねたのであれば、httpd.conf及び/etc/httpd/conf.dの中の設定ファイルに対してAllowOverrideで検索をかけてチェックされることをお勧めします。(ブログトップページは表示されるのに個別ページは404になる場合はここが影響している可能性が高いです)

    CentOSということですので、このサイトあたりが参考になるのではないでしょうか。
    http://tanaka.sakura.ad.jp/2011/05/centos-linux-apache-php-perl-mysql-lamp.html

    また↓の確認がまだであれば見てみてください。

    • wp-configでWP_DEBUGをtrueにしてデバッグ情報を確認する。
    • /var/log/httpdのApacheログ

    $_REQUESTはブラウザからのリクエストに含まれる値を扱うための特別な変数です。
    プログラムの流れのなかで受け渡したりする類のものではありません。

    $_REQUEST
    http://php.net/manual/ja/reserved.variables.request.php

    当方の/var/www/html直下に配置したWordPressで「設定」→「一般」を表示したときの$_REQUEST[‘_wp_http_referer’]の中身はhttp://example.com/wp-admin/でした。
    ご参考までに。

    トピック投稿者 ry0ta.ma2da

    (@ry0tama2da)

    Hikari Aoiさん
    詳細な情報ありがとうございます。

    参考リンク内「httpd -Mコマンドでmod_rewriteがHTTPDに読み込まれているか確認しよう。」
    httpdはyumでインストールすると/usr/sbin/httpdにあります。

    コマンドの詳細ありがとうございます。確認しました。
    「rewrite_module (shared)」となっており、問題ないようです。

    httpd.conf及び/etc/httpd/conf.dの中の設定ファイルに対してAllowOverrideで検索をかけてチェックされることをお勧めします。

    どちらも問題ないようです。

    wp-configでWP_DEBUGをtrueにしてデバッグ情報を確認する。

    エラーや警告情報は表示されませんでした。

    /var/log/httpdのApacheログ

    確認しましたが、疑わしい不明なエラーなどはありませんでした。

    皆さんの環境だと$_REQUEST[‘_wp_http_referer’]が
    「http://example.com/wp-admin/」「http://example.com/wp/wp-admin/」のように
    「httpからwp-admin」までのパスを取得できているようですが、
    なぜ私の環境の場合、「/wp-admin/…….php?…」なのか。

    nobitaさんに教えて頂いたリライトルールを調べる
    「AskApache RewriteRules Viewer」をインストールしてみましたが、
    あまり詳細に時間をかけて確認できてませんが、ちょっと使い方が分かりませんでした。

    引き続き、確認してみます。

    トピック投稿者 ry0ta.ma2da

    (@ry0tama2da)

    ご報告が遅くなってしまいましたが、404エラーの件、解決しました。
    そもそも最初に書いた私の情報に不足があったのですが、
    今回設置したWPへのアクセスで以下のように1度リバースプロキシサーバを経由する、ということが漏れておりました。

    このリバースプロキシサーバからの転送URLを以下のように修正することで404エラーが解消しました。

    ●修正前
    以下URLでリバースプロキシサーバにアクセスし、
    http://hogehoge.jp/eblog

    そこから、WPを設置した別のサーバの仮想ホストに以下URLで転送。
    http://hogehoge-virual.jp/

    この転送形式では、$_SERVER[‘REQUEST_URI’] に以下のパスが取得されるため、404エラーとなっておりました。
    ※以下のパスは404発生箇所の一例で、ダッシュボードの一般設定の変更ボタンのPOST先のパス

    $_SERVER[‘REQUEST_URI’] に取得されるパス
    → /wp-admin/options-general.php

    ○修正後
    対策として、仮想ホストに転送するリクエストを以下のように「/eblog」を付けた形に変更すると、
    正しくパスは取得され404エラーは解消しました。

    変更後の仮想ホストへの転送URL
    http://hogehoge-virual.jp/eblog

    $_SERVER[‘REQUEST_URI’] に取得されるパス
    → /eblog/wp-admin/options-general.php

    >nobitaさん、CyberCypherさん、Hikari Aoiさん、
    こちらの情報が不足していたために、お手間を取らせてしまい、申し訳ありませんでした。
    多くのアドバイスを頂き、ありがとうございました。

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • トピック「ダッシュボード内のリンク、ボタン押下時に404エラーが発生」には新たに返信することはできません。