Правило перезаписи Apache Httpd 2.4 для возврата 301 редиректа , но возвращает 302

У меня есть два разных примера, где Apache Httpd 2.4 на Centos7 настроен для выполнения перенаправления с флагом R = 301, но на самом деле они возвращают 302 перенаправления. Один из них - чрезвычайно простой случай, просто перенаправление http на https. Вот объем правил перезаписи:

<VirtualHost ...>
  ... other content ...
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [NC,R=301,L]
</VirtualHost>

Почему это возвращает перенаправление 302 вместо 301?

# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   example.com (/etc/httpd/sites- 
enabled/example.com.conf:5)
*:443                  example.com (/etc/httpd/sites- 
enabled/example.com.conf:23)
Syntax OK
0
задан 22 June 2018 в 16:44
1 ответ

Ваша проблема в том, что вы не используете подходящее имя хоста для curl. Правило перезаписи срабатывает при условии совпадения имени хоста example.com . Если вы просто используете curl http: // localhost , тогда httpd получает имя хоста «localhost», и правило не соответствует. Вместо этого используйте команду curl с аргументом --proxy, указывающим на localhost (обязательно укажите номер порта!), И аргументом url, соответствующим ожидаемому имени хоста. Примерно так:

curl --proxy localhost:80 http://example.com
0
ответ дан 5 December 2019 в 05:48

Теги

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