Получение "302 найдено" даже после перенаправления на определенный файл в.htaccess

У меня есть сервер 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 отображается как есть на терминале.

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> контейнер - это не должно быть внутри vhost?

Другие вопросы по тегам