Я запускаю приложение Vue. js на экземпляре AWS EBS. Сайт работает отлично, и недавно мы начали предварительную визуализацию некоторых страниц в stati c HTML по причинам SEO. Мы также создали правила в файле .htaccess, которые обрабатывают, когда эти файлы используются.
У меня есть файл .ebsextension, который имеет расширение конфигурации, чтобы всегда перенаправлять на SSL:
files:
/etc/httpd/conf.d/httpd-redirect.conf:
mode: "000644"
owner: root
group: root
content: |
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Эта часть работает нормально, все запросы, если они не https: / / получить перенаправление, поэтому здесь нет проблем.
Файл .htaccess:
ErrorDocument 404 /404
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com
RewriteRule (.*)$ https://example.com/$1 [R=301,L]
#redirect chapters 'folder' to first chapter slide
RewriteCond %{REQUEST_URI} ^/chapters/?$
RewriteRule (.*) /chapters/chapter-1/ [R=301,L]
#send crawlers to prerendered html page
RewriteCond %{HTTP_USER_AGENT} googlebot|bingbot|yandex|baiduspider|facebookexternalhit|Facebot|twitterbot|rogerbot|linkedinbot|embedly|quora\ link\ preview|showyoubot|outbrain|pinterest\/0\.|pinterestbot|slackbot|vkShare|W3C_Validator|whatsapp [NC,OR]
RewriteCond %{QUERY_STRING} _escaped_fragment_
RewriteCond %{REQUEST_URI} !\.[a-zA-Z0-9]{3,4}
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ $1.html
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
Поэтому, когда я делаю запрос на страницу без завершающего sla sh, происходит следующее:
# wget http://example.com/chapters/chapter-1
--2020-02-07 13:02:02-- http://example.com/chapters/chapter-1
Resolving example.com (example.com)... 1.2.3.4, 5.6.7.8
Connecting to example.com (example.com)|1.2.3.4|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://example.com/chapters/chapter-1 [following]
--2020-02-07 13:02:05-- https://example.com/chapters/chapter-1
Connecting to example.com (example.com)|1.2.3.4|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://example.com/chapters/chapter-1/ [following]
--2020-02-07 13:02:06-- http://example.com/chapters/chapter-1/
Connecting to example.com (example.com)|1.2.3.4|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://example.com/chapters/chapter-1/ [following]
--2020-02-07 13:02:07-- https://example.com/chapters/chapter-1/
Connecting to example.com (example.com)|1.2.3.4|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 103126 (101K) [text/html]
Saving to: ‘chapter-1’
chapter-1 100%[=====================================================================================>] 100.71K 53.6KB/s in 1.9s
Если вы видите его перенаправление на https (что правильно), но затем, потому что нет / в конце, его перенаправление обратно на http://example.com/chapters/chapter-1/ (теперь с трейлингом sla sh), а затем, наконец, вернемся к https-версии URL с завершающим sla sh.
Я не могу go вперед и убедиться, что все URL имеют конечный номер sh, к сожалению, некоторые из них не нуждаются в этом, когда присутствуют определенные динамические c идентификаторы и т.д. c. Я хотел бы просто перенаправить один раз на https с завершающим sla sh, но я не могу заставить его работать. Или даже просто перенаправить на https без, а затем на https с sla sh (за исключением странного среднего перенаправления обратно на http).
Я подозреваю, что это связано с тем, что в Интернете root есть папка под названием главы с подпапкой глава-1, и apache запутывается. Возможно, из-за правила перезаписи -d?
Есть идеи?
Спасибо! Ian