web-dev-qa-db-ja.com

.htaccess内の特定のファイルにリダイレクトした後でも「302Found」を取得する

所有しているドメインを指すEC2インスタンスでホストされているApacheサーバーがあります。さて、私が本質的にやりたいことは、ユーザーがドメインをカールしようとしたときに、Webサーバーが.jsonファイルを返す必要があるということです。

例えば。 $curl mydomain.com

000-default.confにある私の/etc/Apache2/sites-available/ファイルは次のようになります。 <Directory>セクションを追加して、Webサイトのルートでもある.htaccessフォルダーにある/var/www/htmlファイルをアクティブにしました。

    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>

<Directory /var/www/html/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

私の.htaccessファイルは次のようになります。

RewriteEngine On
RewriteCo "%{HTTP_USER_AGENT}" curl
RewriteRule ^(.*)$ "/var/www/html/resume.json" [L,R=302]

私の/var/www/htmlディレクトリは次のようになります。

/.well-known
.htaccess
index.html
resume.json

私は数多くの例とチュートリアルを経験し、特定のことを行う必要がある限り、どこからでも少しずつ使用して到達しました。残念ながら、ドメインをカールしようとすると、次のメッセージが返されます。

C:\Users\example >curl example.com/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://example.com">here</a>.</p>
<hr>
<address>Apache/2.4.29 (Ubuntu) Server at example.com Port 80</address>
</body></html>

ターミナルに.jsonをそのまま表示できない構成で、何が悪いのか知りたいのですが。

2
jait

CURLを使用している場合は、_-L_フラグを使用してfollowリダイレクトする必要があります。そうしないと、リダイレクト応答が表示されます。これが表示されます。 (それがあなたの_.htaccess_ディレクティブが行っていることだからです。)

ただし、_.htaccess_ファイルにエラーがあります...

_.htaccess_ファイル(「スクリーングラブ」から):

_RewriteEngine On
RewriteCo "%{HTTP_USER_AGENT}" curl
RewriteRule ^(.*)$ "/var/www/html/resume.json" [L,R=302]
_

そのRewriteCo行は明らかな構文エラーです-それで、実際のファイルに含めることはできないと思いますか?

  • _"/var/www/html/resume.json"_ --_.htaccess_では、RewriteRulesubstitutionはURLパスを取ります(ドキュメントルートに対して)-絶対ファイルシステムパスを指定しました。動作しません。

  • ^(.*)$ --RewriteRulepatterneverythingと一致するため、リダイレクトループが発生します。ドキュメントルートのみをリダイレクトする場合は、代わりに_^$_を使用する必要があります。

代わりに次を試してください。

_RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} curl
RewriteRule ^$ /resume.json [R=302,L]
_

ただし、本当に外部リダイレクトリクエストを実行しますか?これはおそらく内部書き換え:であるはずです。

_RewriteRule ^$ /resume.json [T=application/json,L]
_

Aside: _<Directory>_セクションが_<VirtualHost>_コンテナの外側に「浮いている」ように見えます-これは仮想ホストの内側にあるべきではありませんか?

2
MrWhite