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

У меня есть сервер Apache, размещенный на экземпляре EC2, который указывает на принадлежащий мне домен. Теперь, по сути, я хочу, чтобы веб-сервер возвращал файл .json , когда пользователь пытается свернуть домен.

например. $ curl mydomain.com

Мой файл 000-default.conf , расположенный в / etc / apache2 / sites-available / , выглядит следующим образом. Я добавил раздел , чтобы активировать файл .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
задан 25 January 2019 в 12:39
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]

В сторону: Похоже, ваш раздел «плавает» за пределами вашего контейнер - разве это не должно быть внутри виртуального хоста?

2
ответ дан 3 December 2019 в 11:23

Теги

Похожие вопросы