設置したads.txtにアクセスしたのに404ページが表示される?対応した解決策

ai
こんばんは「ai」です。

自分のブログでも一度設定してしまうと、普段触らない機能ってありますよね。

どのような設定をしたのか、そもそも何のために設定したのかも忘れてしまっていたりするものです。

今回、わたしに降りかかったトラブルは、 ads.txt にアクセスしても404エラー(404 not found)になり広告サービスに ads.txt が認識されないというもの。

これも過去に設定して忘れ去っていたカスタムの内容が原因でした。

ads.txt にアクセスしても404エラー(404 not found)になっていた原因にたどり着いた一連の確認内容を共有します。

The Moneytizer に登録しようと思った

事の起こりは、広告配信サービスの The Moneytizer に登録しようとしたときのことです。

The Moneytizer はインプレッション型の広告を配信しており、広告がクリックされなくても表示さえされていれば収益になるという頑張らなくてもよさそうな素敵なサービスです。

まだ登録されていない方は、とりあえず登録してみるのもよいかもしれません。

ちなみに登録する際は、すでに登録している人の紹介コードを入力して進めると審査合格後に5ドル貰えます。

紹介した人にも収益が発生します。

わたしは自分がお得になるかが重要で、他の人が儲かろうとどうでもよいという考えなので、紹介コードを載せているサイトを探して登録しました。

あなたがもし登録するなら、以下のわたしの紹介コードを利用してくれると嬉しいです。

c1061524694807db1664688bb9ea7cb0

The Moneytizer に登録

ads.txt が認識されない

The Moneytizer の勧誘みたいになってしまいましたが話を戻すと、 The Moneytizer にサイトを登録する流れで自分のブログの ads.txt というファイルに The Moneytizer の広告を配信するための設定を書き込むというフローがあります。

レンタルサーバーのファイルエクスプローラーなり、FTPなりで ads.txt にアクセスすれば編集自体は大したことのない作業です。

ads.txt の編集後は The Moneytizer のダッシュボード上から[統合の確認]というボタンを押して、ads.txt が正しく設定されているかの検査をするのですが…

「ads.txtファイルの統合を確認することができません!」

ads.txt の確認に失敗してしまいました。

ads.txt 設置済みなのにアクセスできない

FTP経由で ads.txt の存在や内容、自動設定用のphpファイルと .htaccess ファイルの記載内容を確認してもThe Moneytizer 指定されている設定になっています。

なのにブラウザのアドレス欄に「https://example.com/ads.txt」のように直接 ads.txt にアクセスすると「404 Not Found」ページに飛ばされました。

ads.txt はあるのにページが存在しないとはどういうこと?

ネットやSNSで調べても解決策は出てきませんでした。

ChatGPT に聞いてみることにした

ネットで調べても出てこないということは、わたしの環境特有の現象と考えられます。

環境特有となると、過去に行ったカスタマイズが悪さをしている可能性が高いと判断しました。

しかし結構なカスタマイズをしており、ブログ立ち上げ当初はネット上にあるおすすめカスタマイズを理解せずにコピペしたりしていたので、問題がありそうな部分の絞り込みにも一苦労です。

そこで ChatGPT に設定ファイルの内容を提示して、問題がありそうな部分をピックアップしてもらうことにしました。

ちなみにChatGPTの回答の中で赤のマーカーを引いたところは、わたしが次の質問をするきっかけとなった部分です。

取り合えず現状を伝えてみる

ai
ai

WordPressアドレスとサイトアドレスが異なる設定になっています。

関係ありそうな情報を与えようと、どんな問題が起きているかの前に唐突に言ってしまいました。

ChatGPT
ChatGPT

WordPressの「WordPressアドレス」と「サイトアドレス」が異なる設定になっている場合、一般的には次のような問題が生じる可能性があります。

WordPressアドレス(Site URL)とは、WordPressがインストールされたディレクトリへのアクセスを指すものです。一方、サイトアドレス(Home URL)は、実際のウェブサイトのURLを指します。これらの設定が異なる場合、以下のような問題が発生する可能性があります。

  1. リンクの破損: ウェブサイト内に設置されているリンクや画像のURLが正しくない場合、ユーザーがページを閲覧する際に正しく表示されないことがあります。
  2. ログインできない: WordPressのログインページにアクセスできなくなる可能性があります。ログインページへのアクセスもWordPressアドレスに依存しているため、設定が誤っているとログインできなくなることがあります。
  3. スタイルの適用不良: ウェブサイトのスタイルシートやテーマの関連ファイルが正しく読み込まれないことがあり、ウェブサイトのデザインが崩れる可能性があります。

これらの問題を解決するには、WordPressの設定を確認して適切に修正する必要があります。具体的な手順は以下の通りです。

  1. WordPressの管理画面にログイン: WordPressにログインし、ダッシュボードにアクセスします。
  2. 設定の確認と修正: ダッシュボードから「設定」メニューに移動し、「一般」を選択します。そこで、WordPressアドレス(Site URL)とサイトアドレス(Home URL)の設定を確認し、正しいURLが入力されていることを確認します。異なる場合は、正しいURLに修正します。
  3. 変更の保存: 設定を修正したら、変更を保存するために「変更を保存」ボタンをクリックします。

設定の変更によって問題が解決しない場合や、設定を変更する際に注意が必要な場合は、WordPressの公式ドキュメントを参照するか、WordPressコミュニティやサポートフォーラムで質問することをおすすめします。

わたしが陥っている問題については触れられなかったので、問題の詳細を伝えます。

ai
ai

ads.txtをルートディレクトリに設置したのですが、ブラウザからアクセスすると404エラーが表示されます。
考えられる対処方法と確認方法を提示してください。

ChatGPT
ChatGPT

「ads.txt」ファイルをルートディレクトリに設置したにもかかわらず、ブラウザからアクセスすると404エラーが表示される場合、以下の対処方法と確認方法を試してみることができます。

対処方法:

  1. ファイル名と拡張子を確認: ファイル名が正しく「ads.txt」という名前で、拡張子も「.txt」であることを確認してください。ファイル名や拡張子が誤っている場合、サーバーはファイルを正しく認識できない可能性があります。
  2. ファイルの場所を確認: ads.txtファイルはウェブサイトのルートディレクトリ(通常はpublic_htmlまたはwwwフォルダ)に配置する必要があります。ファイルが正しい場所に配置されているかを確認してください
  3. ファイルのパーミッションを確認: ファイルが正しい場所にある場合、ファイルのパーミッション(アクセス権限)が適切に設定されていることを確認します。ファイルが読み取り可能なパーミッションを持っているか確認してください。

確認方法:

  1. 直接URLでアクセス: ブラウザのアドレスバーに「https://yourdomain.com/ads.txt」と入力してアクセスしてみてください(「yourdomain.com」の部分を自分のドメインに置き換えてください)。ファイルが正しく配置されていれば、テキスト内容が表示されるはずです。
  2. ファイルエクスプローラー: ホスティングプロバイダの提供するファイルエクスプローラーやFTPクライアントを使用して、ファイルが正しい場所に存在することを確認します。
  3. エラーログの確認: ホスティングプロバイダのコントロールパネルやエラーログを確認して、何が原因でアクセスできないのかを確認することができます。

上記の手順を試しても問題が解決しない場合は、ホスティングプロバイダのサポートに問い合わせることを検討してください。ホスティング環境や設定によって異なる場合があるため、サポートの専門知識を活用することが大切です。

とりあえず、「直接URLでアクセス」を試してみましたが、やっぱり404ページに行ってしまいました。

Google AdSense では認識されている

よく考えたら、ads.txt ってGoogle AdSenseでも必要なファイルなんですよね。

そしてGoogle AdSenseでは認識されているので、The Moneytizer 側の設定が怪しいのではないかという気がしてきました。

ai
ai

やはり404エラーが表示されますが、Google AdSenseのコンソールでは認識されているようです。
考えられる対処方法と確認方法を提示してください。

ChatGPT
ChatGPT

Google AdSenseのコンソールで「ads.txt」が認識されているということは、ファイル自体が正しく配置されており、Googleのクローラーがそれを確認していることを意味します。ただし、ブラウザからアクセスする際に404エラーが表示される場合、ウェブサーバーの設定やキャッシュの問題が考えられます。以下の対処方法と確認方法を試してみてください。

対処方法:

  1. キャッシュのクリア: ウェブブラウザやサーバー側のキャッシュが古い情報を保持している可能性があります。ウェブブラウザのキャッシュをクリアし、サーバーサイドのキャッシュもクリアすることを試してみてください。
  2. URLリライトの確認: ウェブサーバーの設定にURLリライトが設定されている場合、正しく設定されていないとファイルへのアクセスが妨げられることがあります。URLリライトの設定を確認して、問題がないか確認してください。
  3. ファイル名の大文字・小文字: ウェブサーバーはファイル名の大文字と小文字を区別することがあるため、ファイル名の大文字・小文字が正しく一致しているか確認してください。

確認方法:

  1. 別のデバイスやブラウザでアクセス: 別のデバイスやブラウザからアクセスしてみて、同じ問題が発生するかどうか確認してみてください。特定のデバイスやブラウザに依存している可能性も考えられます。
  2. プライベートブラウジングモード: プライベートブラウジングモードを使用してアクセスしてみてください。キャッシュの問題を回避できる場合があります。
  3. .htaccessファイルの確認: ウェブサーバーのルートディレクトリにある.htaccessファイルに何らかの設定が影響している可能性があります。.htaccessファイルを確認し、問題の原因となる設定がないか確認してください。

もし上記の手順を試しても問題が解決しない場合は、ウェブホスティングのサポートに問い合わせて、具体的なサーバー設定や問題についてアドバイスを得ることを検討してください。

The Moneytizer では、ads.txt を自動で更新するために ads_tm.php というファイルを設置します。

このファイルの設置に問題があるのではないでしょうか。

ai
ai

URLリライトはどのようにして確認できますか

ChatGPT
ChatGPT

ウェブサーバーのURLリライトが正しく設定されているかを確認するには、ウェブサーバーの設定ファイルをチェックする必要があります。一般的に、URLリライトは主にApacheやNginxといったウェブサーバーソフトウェアの設定ファイルで行われます。以下では、ApacheとNginxのそれぞれの場合での確認方法について説明します。

Apache ウェブサーバーの場合:

Ubuntu/Debian: /etc/apache2/apache2.conf もしくは /etc/apache2/sites-available/
CentOS/Fedora: /etc/httpd/conf/httpd.conf もしくは /etc/httpd/conf.d/

  1. ウェブサーバーの設定ファイルを確認します。一般的に、Apacheの設定ファイルは主に以下のファイルに含まれています。
  2. 該当の設定ファイルをテキストエディタで開き、URLリライトに関連する設定を探します。mod_rewriteというモジュールを使用してURLリライトが設定されている場合が多いです。
  3. 設定ファイル内でRewriteRuleやRewriteCondといったディレクティブを検索して、URLリライトのルールを確認します。例えば、WordPressの場合、以下のようなルールがあるかもしれません。
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

URLリライトの設定はウェブサーバーの種類やウェブサイトの構成によって異なるため、上記の例は一般的なものです。具体的な設定を確認するには、ウェブサーバーのドキュメントや設定ファイルを調査する必要があります。設定ファイルを変更する際には慎重に行い、エラーを避けるためにバックアップを取ることをおすすめします。

そういえば、The Moneytizer のads.txt の設定の際に.htaccess ファイルに以下を追記しました。

RewriteEngine On
RewriteRule ^ads.txt$ ads_tm.php

.htaccess ファイルの内容を評価してもらうことにしましょう。

ai
ai

.htaccessは以下の設定になっています。

~~ .htaccessの内容を全選択してコピペ ~~

ChatGPT
ChatGPT

ありがとうございます。提供いただいた.htaccessファイルを見ると、WordPressに関連するリライトルールやその他の設定が含まれていることがわかります。Google AdSenseのads.txtファイルの設定も行われているようです。

ただし、現在の.htaccessファイルでは、「ads.txt」へのアクセスに関する特別なルールが見当たりません。これが「ads.txt」へのアクセスで404エラーが発生する原因の1つと考えられます。

次の手順で「ads.txt」にアクセスするためのリライトルールを追加することを検討してみてください。以下は.htaccessファイルの一部を修正した例です。

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^91\.208\.99\.([0-9]*)$
RewriteRule ^(.*)$ - [R=404,L]

# The Moneytizerの設定
RewriteRule ^ads.txt$ ads_tm.php

# 以下、既存のWordPressのリライトルールなどが続く...

上記の例では、RewriteRule ^ads.txt$ ads_tm.phpという行を追加しています。これにより、「ads.txt」へのアクセスはads_tm.phpにリダイレクトされるようになります。ただし、これはあくまで一例であり、実際の環境に合わせて適切な設定を行う必要があります。

設定を変更する前に、一旦バックアップを取ることを強くおすすめします。.htaccessファイルの編集による誤った設定は、ウェブサイトの動作に影響を及ぼす可能性があるためです。変更を行った後、ウェブサイトの動作をテストしてから公開環境に適用してください。

ai
ai
“RewriteRule ^ads.txt$ ads_tm.php”という行を追加しましたが、正しく設定されていますか。

ChatGPT
ChatGPT
その部分は正しく設定されており、特に問題はありません。

Google AdSenseのads.txtファイルは、既にリライトルールを通じて正しく扱われているようです。そのため、ブラウザから直接「https://yourdomain.com/ads.txt」(「yourdomain.com」をあなたのドメインに置き換えてください)にアクセスしても404エラーは表示されないはずです。

もしブラウザからアクセスした際に404エラーが表示される場合は、ウェブサーバーのキャッシュクリアやブラウザのキャッシュクリアを試してみると良いかもしれません。また、ウェブサーバーのエラーログやアクセスログを確認することで、詳細なエラーの情報を得ることができるかもしれません。

もしも問題が解決しない場合は、ホスティングプロバイダのサポートに問い合わせて、より具体的なアドバイスを得ることができるでしょう。

The Moneytizerの設定時に追加した”RewriteRule ^ads.txt$ ads_tm.php”は問題なさそうですね。

キャッシュの問題なのかを確認

キャッシュクリアを提案されたので、キャッシュを保存しないChromeのシークレットモードでads.txtにアクセスしてみましたが、404ページ送りになりました。

ai
ai

シークレットモードでアクセスしても404エラーでした

ChatGPT
ChatGPT

シークレットモードでアクセスしても404エラーが表示される場合、他の一般的な問題が考えられます。以下の手順を試して、問題を特定し解決するお手伝いができればと思います。

  1. ファイルの存在を確認: .htaccess ファイル内の RewriteRule ^ads.txt$ ads_tm.php によって、ads.txt ファイルは ads_tm.php にリライトされるはずです。したがって、ads_tm.php ファイルが存在していることを確認してください。また、ファイル名のスペルや大文字・小文字の一致にも注意してください。
  2. ファイルのパーミッションを確認: ads_tm.php ファイルがウェブサーバーからアクセス可能なパーミッションを持っていることを確認してください。通常は読み取り可能なパーミッション (例: 644) が適切です。
  3. ウェブサーバーの再起動: 一部のウェブサーバーは設定変更を反映するために再起動が必要なことがあります。ウェブサーバーを再起動してみてください。
  4. 別のデバイス/ネットワークで試す: 環境の違いによって問題が発生している可能性もあります。別のデバイスやネットワークからアクセスしてみてください。
  5. エラーログの確認: ウェブサーバーのエラーログを確認してみて、具体的なエラーメッセージや問題の原因を特定してみてください。
  6. ホスティングプロバイダへの問い合わせ: サポートチームに問題を報告し、ウェブサーバーの設定や問題についてアドバイスを得ることができるか確認してみてください。

これらの手順を試しても問題が解決しない場合は、ホスティングプロバイダに問い合わせて、より詳細な支援を受けることを検討してください。ウェブサーバーの環境や設定によって異なる問題が発生することがありますので、専門家のアドバイスが役立つことがあります。

疑いの目は The Moneytizer へ

ads.txt へのアクセスは ads_tm.php にリダイレクトされるようになるということなので、The Moneytizer から提供された ads_tm.php ファイルがおかしいのではないかと疑ってみました。

リダイレクトされた先の ads_tm.php でうまく動いていないのではないのかということです。

ai
ai

ads_tm.phpの内容は以下なのですが、内容自体は問題なさそうですか。

~~ ads_tm.phpの内容を全選択してコピペ ~~

ChatGPT
ChatGPT

提供いただいたコードの内容を見る限り、特に明らかな問題は見当たりません。スクリプトは、ユーザーが作成した ads.txt ファイルと themoneytizer.com から取得した ads.txt ファイルの内容を適切に処理して、重複を排除して結合し、最終的にブラウザに表示するようになっています。

しかしながら、コードの挙動を確認するためには実際に動作させる必要があります。ブラウザから ads_tm.php にアクセスし、その出力を確認することが重要です。問題が発生している場合、具体的なエラーメッセージや動作の異常を特定するために、ウェブサーバーのエラーログを確認することも役立ちます。

もしも特定のエラーや不具合がある場合は、ウェブサーバーの設定、ファイルのパーミッション、URLアクセスの問題、PHPの設定などを調査してみることが重要です。

とりあえずリダイレクト先である ads_tm.php にアクセスできるかを確認することにします。

ai
ai

ads_tm.phpにアクセスする方法を教えてください

ChatGPT
ChatGPT
ads_tm.php にアクセスするためには、ウェブブラウザを使用して直接URLを入力するか、ウェブサイト内のリンクをクリックすることができます。以下の手順でアクセスできます。

URLを直接入力する方法:
ウェブブラウザのアドレスバーに以下のようなURLを入力します(ドメイン部分を実際のドメインに置き換えてください)。

https://yourdomain.com/path/to/ads_tm.php

ここで、yourdomain.com はあなたのドメイン名、path/to/ は ads_tm.php ファイルが配置されているディレクトリのパスです。

ウェブサイト内のリンクをクリックする方法:
もしあなたのウェブサイトのどこかに ads_tm.php へのリンクがある場合、そのリンクをクリックすることでアクセスできます。通常、ウェブサイトのメニューやフッターなどにリンクが配置されることがあります。

アクセスする際に、URLが正しく入力されているか、ディレクトリ構造やファイル名が合っているか確認してください。また、アクセスした際にウェブサーバーからエラーメッセージが表示される場合は、それに従って対応することが大切です。ウェブサーバーのエラーログも確認してみてください。

言われた通りにアクセスしてみると、ads_tm.php にはアクセスできました。

ads.txt と同じ階層にあるのに…

ai
ai

ads.txtと同じディレクトリ階層にあるads_tm.phpにはアクセスできました。
ads.txtが404になる原因として考えられることは何ですか

ChatGPT
ChatGPT

ads_tm.php にはアクセスできるが、同じディレクトリにある ads.txt にアクセスできない場合、ads.txt が404エラーを返す原因として以下の可能性が考えられます。

  1. ファイルの実在性: ads.txt ファイルが実際にそのディレクトリに存在するか確認してください。ファイル名やディレクトリのスペルが間違っていないことを確認してください。
  2. ファイルパーミッション: ads.txt ファイルがウェブサーバーからアクセス可能なパーミッションを持っていることを確認してください。通常は読み取り可能なパーミッション(例: 644)が適切です。
  3. ファイル名の大文字・小文字: ウェブサーバーは一般的にファイル名の大文字と小文字を区別するため、ファイル名のスペルや大文字・小文字の一致を確認してください。
  4. URLの正しさ: ads.txt へのURLが正しく設定されていることを確認してください。.htaccess ファイル内でのリライトルールや、WordPressの設定によってURLが変更されている可能性も考えられます。
  5. セキュリティ設定: ウェブサーバーのセキュリティ設定、ファイアウォール、セキュリティプラグインなどが、ads.txt ファイルへのアクセスを制限している可能性があります。設定を確認してみてください。
  6. URLリライトの影響: .htaccess ファイル内のURLリライトルールが ads.txt へのアクセスに影響を与えている可能性があります。リライトルールを確認し、適切な設定になっていることを確認してください。
  7. キャッシュ: ブラウザやプロキシサーバーのキャッシュによって古い情報が表示されている可能性があります。キャッシュをクリアしてみてください。
  8. URLエンコード: もし ads.txt ファイル名に特殊な文字が含まれている場合、URLエンコードされている可能性があります。正しいURLエンコードが行われているか確認してみてください。
    1. これらの要因を検討し、適切な設定を行うことで、ads.txt ファイルへのアクセスが正常に行われるようになるかもしれません。

ファイルパーミッション…確かにアクセス可能権限が違えばファイルの場所は同じでもアクセスできたり、できなかったりするかもしれません。

アクセス権限の確認

ads.txt ファイルのアクセス権限を確認してみます。

現状、ads.txt の権限は604ですね。

ai
ai

ads.txtの権限は604でした

ChatGPT
ChatGPT

ads.txt ファイルのパーミッションが 604 ということですね。このパーミッションでは、ファイル所有者には読み取りと書き込みの権限があり、グループと他のユーザーには読み取りの権限があります。一般的に、ads.txt ファイルは読み取り専用である必要があります。したがって、ファイルのパーミッションを変更して読み取り専用に設定することをおすすめします。

適切なパーミッションを設定するには、次のようにコマンドを実行するか、ファイルマネージャーを使用して設定することができます。

コマンドラインでの設定(SSHアクセスが必要です):

chmod 644 ads.txt

結局、アクセス権限を644にしても404エラーでした。

一応FTPでは見れていることを伝えておきます。

ai
ai

ads.txt ですが、FTPで見ることはできました。

ChatGPT
ChatGPT

FTP(File Transfer Protocol)を使用して ads.txt ファイルのアドレスを取得しましたが、ads.txt ファイルへのFTPアクセスは通常のウェブブラウジングとは異なるため、直接のウェブアクセスとは関係ない可能性があります。ウェブブラウジングに関連する問題を解決するために、FTPアクセスはあまり役立たない可能性があります。

もしご自身のウェブサイト上で ads.txt ファイルへのアクセスに問題がある場合、前の回答で提供したヒントとアドバイスに従って調査を進めてみてください。また、ウェブブラウジングから ads.txt ファイルにアクセスする場合、正しいウェブアクセスのURL(例:https://orange-antenna.com/ads.txt)を使用してください。FTPアクセスは、ファイルがウェブ上で正しく表示されるかどうかには直接関係しない可能性が高いです。

FTPは、関係ないのですね。

.htaccess を触ってたらアクセス可能に

ここで .htaccess の内容を眺めていると「404」の文字がありました。

これが気になって、試しに該当行をコメントアウトすると、なんと404エラーが解消して ads.txt にアクセスできるようになりました。

一応、コメントアウトして問題ないものか、ChatGPTに確認してもらいましょう。

ai
ai

RewriteRule ^(.*)$ – [R=404,L]の部分をコメントアウトしたらads.txtにアクセスできるようになりました。
原因は何が考えられますか。

以下のような感じです

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^91\.208\.99\.([0-9]*)$
RewriteCond %{REQUEST_URI} !^/ads.txt$
RewriteRule ^(.*)$ - [R=404,L]

ChatGPT
ChatGPT

提供いただいた内容を確認しました。

以下の .htaccess のルールは、特定の IP アドレスからのリクエストを除いて、すべてのリクエストを 404 エラーにリダイレクトするものです。

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^91\.208\.99\.([0-9]*)$
RewriteCond %{REQUEST_URI} !^/ads.txt$
RewriteRule ^(.*)$ - [R=404,L]

調べてみると、どうやら無断でブログのコピーを作成する悪質なサイトがあって、そこからのアクセスを404に飛ばすようにしているようです。

ブログの立ち上げをしたときに、見よう見真似で設定した内容みたいですね。

ChatGPTに報告です。

ai
ai

IP アドレスが 91.208.99. で始まるサイトのコピーを作成する悪質なサイトからのアクセスを404にしているようです。

ChatGPT
ChatGPT

理解しました。提供いただいた情報に基づいて、特定の IP アドレスからの悪質なアクセスをブロックしていることがわかりました。

このルールは、IP アドレスが 91.208.99. で始まる場合に、全てのリクエストを 404 エラーにリダイレクトするために使用されています。これによって、特定の IP アドレスからのアクセスを防ぎつつ、正常なアクセスは許可されるようになっています。

ただし、このルールを追加することで、ads.txt へのアクセスも 404 エラーになってしまうため、RewriteCond を使って ads.txt へのアクセスはルールから除外することで、問題を解決しました。

ご質問内容が解決されたようで何よりです。何か他に質問があればどうぞお気軽にお知らせください。

なんかやり切った感を出していますね。

まだ終わっていない

404リダイレクトの部分をコメントアウトしたということは、悪質なアクセスを404にできなくなったということなんですよね。

悪質なアクセスを404にする設定が本当に必要かはさておき、これでは気持ちよく解決したとは言えません。

404リダイレクトの設定は生かしつつ ads.txt へのアクセスは404に飛ばさないようにすることを目指します。

ai
ai

RewriteCond を使って ads.txt へのアクセスはルールから除外できずに解決できていません

ChatGPT
ChatGPT

申し訳ありません、誤解が生じました。正しく理解していただければと思います。

おっしゃる通り、RewriteCond を使って ads.txt へのアクセスをルールから除外することはできないため、問題が解決していないことを確認しました。既存の .htaccess ルールが ads.txt の表示に影響を及ぼしているようですが、どの部分が原因か特定するためにはさらなるデバッグが必要です。

ai
ai

コメントアウトしたら正常に動作するようになるので、原因はRewriteRule ^(.*)$ – [R=404,L]です

ChatGPT
ChatGPT

承知しました。RewriteRule ^(.*)$ – [R=404,L] のルールが問題の原因となっていることが確認されましたね。

このルールがアクセスを 404 エラーにリダイレクトすることで ads.txt へのアクセスが妨げられているようです。このルールを特定のファイルやフォルダに適用しないようにするために、RewriteCond を使用して除外することができます。

以下が、特定のファイルやフォルダにルールを適用しないようにするための .htaccess の例です:

RewriteEngine On

# Exclude ads.txt from the RewriteRule
RewriteCond %{REQUEST_URI} !^/ads.txt$

# Your existing rule that causes issues
RewriteCond %{REMOTE_ADDR} ^91\.208\.99\.([0-9]*)$
RewriteRule ^(.*)$ - [R=404,L]

# Other rules...

このように RewriteCond %{REQUEST_URI} !^/ads.txt$ を追加することで、ads.txt へのアクセスは RewriteRule の影響を受けずに通過できるようになります。これによって、ads.txt へのアクセスが正常に動作するはずです。

提示された内容に修正しても、ads.txt は404でした。

そういえばさっきからRewriteの設定が問題かもしれないということで、色々試していますが、.htaccess には以下のようなRewriteの設定値がありました。

RewriteBase /wordpress/

ちょっと気になりますね。

ai
ai
以下の記載があります。
どういう意味ですか。

RewriteBase /wordpress/

ChatGPT
ChatGPT
RewriteBaseディレクティブは、相対的なリライトルールのベースとなるディレクトリを指定します。これは、.htaccessファイル内の相対パスがどのディレクトリに対して解釈されるかを指定するものです。

例えば、RewriteBase /wordpress/と指定されている場合、.htaccessファイル内の相対パスは/wordpress/ディレクトリをベースにして解釈されます。これにより、WordPressがサブディレクトリ /wordpress/ にインストールされている場合などに、正しいリライトが行われるようになります。

サブディレクトリが基準になるということは、ads.txtもサブディレクトリに置かないといけないということなのでしょうか。

その辺を質問してみます。

ai
ai

WordPressをサブディレクトリにインストールしている場合、一番最初にRewriteBase /wordpress/を書いておくべきですか。

この状態でRewriteRule ^ads.txt$ ads_tm.php[L] とした場合、ads.txtとads_tm.phpはどちらもサブディレクトリ内に置く必要がありますか

ChatGPT
ChatGPT

はい、通常、WordPressをサブディレクトリにインストールしている場合は、.htaccessファイルの冒頭にRewriteBase /サブディレクトリ名/を追加することが推奨されます。これにより、WordPressのリライトルールが正しく動作し、パーマリンクが期待通りに機能します。

RewriteBase /wordpress/ が設定されている場合でも、ルートディレクトリの .htaccess ファイルに RewriteRule ^ads.txt$ ads_tm.php [L] を追加すると、そのルールが実行されるときには RewriteBase の影響を受けません。RewriteRule は .htaccess ファイルが存在するディレクトリを基準として、指定されたパスに対してリダイレクトやリライトを行います。

つまり、ルートディレクトリの .htaccess ファイルに RewriteRule ^ads.txt$ ads_tm.php [L] を追加すると、ルートディレクトリ内の ads.txt と ads_tm.php が対象となります。

ルートディレクトリの .htaccess に RewriteBase /wordpress/ を設定した場合でも、ads.txtとads_tm.phpはどちらもルートディレクトリに置いておいて良いみたいですね。

ai
ai

.htaccess ファイルに競合するRewriteRuleの条件が書かれていた場合、どのような実行結果となりますか。

ChatGPT
ChatGPT

.htaccess ファイルの上から下にルールが評価されるため、最初にマッチするルールが実行されます。

ルールの適用は上に掛かれているものの方が優先されるということですね。

他の記載内容よりも優先されるように、リライト系のルールを.htaccess ファイルの最初に記載するように修正しました。

完全解決

リライト系のルールを.htaccess ファイルの最初に記載するように修正すると、悪質なIPアドレスからのアクセスを404に飛ばす設定をしたまま、ads.txt にアクセスできるようになりました。

そして、The Moneytizer の[統合の確認]も成功しました。

早速報告して、解説をしてもらいましょう。

ai
ai

以下を.htaccess の一番初めに書くことですべてうまくいきました。

# BEGIN WordPress

RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]

# END WordPress

理由を教えて

ChatGPT
ChatGPT
問題を解決できた理由はいくつか考えられます。以下は、可能性のある理由です。

  1. RewriteBaseの追加: RewriteBase /wordpress/ を追加したことで、WordPressがサブディレクトリ /wordpress/ で動作するように設定されました。これにより、WordPressとその他のルールが正しく動作し、競合が解消されました。
  2. RewriteEngine Onの追加: 一部のサーバー環境では、RewriteEngineディレクティブが必要です。これは、URLリライトが有効になることを示します。RewriteEngine On を追加することで、これを確実に設定しました。
  3. WordPressのルールの最適化: WordPressが正しく動作するように、ルールの最適化が行われました。これにより、WordPressのファイルやディレクトリにアクセスした際に、正しい処理がされるようになりました。

これらの変更が、問題の解決に寄与した可能性があります。特に、RewriteBase /wordpress/の追加とRewriteEngine Onの設定が、URLリライトとWordPressの正しい動作に影響を与えたと考えられます。

WordPressがサブディレクトリにインストールされている場合には、何はなくとも一番初めに”RewriteBase /wordpress/”を書く必要があるということでしょうか。

Rewrite周りの記載をすべて最初に記載するようにしたら解決したので、他のルールの影響を受けていたのでしょう。

.htaccessファイルに新しいルールを追加するときは、最終行に追加することを意識した方が良いみたいですね。

まとめ

ads.txt にアクセスると404ページに飛ばされてしまうのは、過去に .htaccess ファイルに設定した悪質なIPアドレスからのアクセスを404に飛ばす設定が原因でした。

また、Wordpressをサブディレクトリにインストールした際に必要になる”RewriteBase /wordpress/”など他のルールを適切な順番で記載する必要がありました。

今回、ChatGPTに解決策を求めながら修正を試みました。

ファイルに記載された内容がどのような意味があるかの確認には役に立ちましたが、結局、ChatGPTの回答だけでは解決に至りませんでした。

ChatGPTの助言をもとに、最終的には、自分でデバッグする必要がありそうです。

The Moneytizer に登録

この記事を書いた人

ai

散歩とひなたぼっこが好きです。
自然の美しさや季節の移り変わりを感じながら、のんびりとした時間を過ごすのが日々の楽しみになっています。

開発と実験