我在 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>
容器外面 - 这不应该在虚拟主机内吗?