即使重定向到 .htaccess 中的特定文件后仍出现“302 Found”

即使重定向到 .htaccess 中的特定文件后仍出现“302 Found”

我在 EC2 实例上托管了一个 Apache 服务器,该服务器指向我拥有的一个域。现在,我主要想完成的是,.json当用户尝试 curl 该域时,Web 服务器应该返回一个文件。

例如。$curl mydomain.com

我的000-default.conf文件位于/etc/apache2/sites-available/以下位置。我添加了<Directory>部分以激活.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

我查阅了大量示例和教程,并使用了来自各处的一些零碎信息来完成我需要完成的具体任务。不幸的是,当我尝试 curl 我的域名时,我收到了以下消息。

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在终端上显示它。

答案1

使用 CURL 时,需要使用标志-L跟随重定向,否则您将只看到重定向响应,也就是您所看到的。(因为这就是您的.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里面RewriteRule 代换采用 URL 路径(相对于文档根目录) - 您提供了绝对文件系统路径,但这不起作用。

  • ^(.*)$- 你的RewriteRule 图案也匹配一切,因此这将导致重定向循环。如果您只想重定向文档根目录,则应使用^$

请尝试以下操作:

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

然而,你真的想外部重定向请求?这应该是一个内部重写

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

在旁边:看起来您的<Directory>部分“浮动”在<VirtualHost>容器外面 - 这不应该在虚拟主机内吗?

相关内容