У меня есть сервер Apache, размещенный на экземпляре EC2, который указывает на мой домен. Теперь, по сути, я хочу, чтобы веб-сервер возвращал .json
файл, когда пользователь пытается свернуть домен.
например. $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
Я просмотрел множество примеров и руководств и использовал кусочки отовсюду, чтобы достичь того уровня, в котором мне нужно было что-то конкретное. К сожалению, когда я пытаюсь скрутить свой домен, я получаю следующее сообщение.
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
отображается как на терминале.
Когда вы используете 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>
контейнер - разве это не должно быть внутри vhost?