Принудительно www и перенаправить корневой каталог - PullRequest
2 голосов
/ 04 октября 2019

Я не мог найти вопрос, который ответил на мой, или, возможно, я не мог искать, используя правильные термины, но давай. У меня есть следующее правило в моем htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com\.br$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com\.br$
RewriteRule ^(.*)$ "https\:\/\/www\.domain\.com\.br\/site" [R=301,L]

Это работает, когда пользователь вводит только URL (domain.com.br или www.domain.com.br), но мне нужно его перенаправить, когда пользователь получает доступ таким образом:

domain.com.br или www.domain.com.br -> https://www.domain.com.br/site
domain.com.br/XXX -> https://www.domain.com.br/XXX

Какое правило я должен использовать для этого?

Обновление : на сервере уже есть правило по умолчанию для принудительного использования SSL, и в этом случае нет необходимости помещать его в htaccess

Обновление правила:

**On virtual host:**
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

**On htaccess file:**
RewriteCond %{HTTP_HOST} ^domain\.com\.br$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com\.br$
RewriteRule ^/?$ https://www.domain.com.br/site/ [R=301,L]

1 Ответ

1 голос
/ 04 октября 2019

Ваш код генерирует цикл перенаправления. Кроме того, вам не нужно избегать косых черт на целях.

Вы можете объединить все внутри своего блока виртуального хоста (быстрее, чем с помощью htaccess):

RewriteEngine On

# force https
RewriteCond %{HTTPS} off [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# force www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# redirect root directory to /site/
RewriteRule ^/?$ /site/ [R=301,L]

Конечно, вы будетесмотрите цепочку перенаправления, например, http://domain.tld/, так как сначала она будет перенаправлена ​​на https://domain.tld/, затем на https://www.domain.tld/ и, наконец, на https://www.domain/tld/site/. Это отлично. Однако, если вы действительно хотите обрабатывать все одним перенаправлением, вы можете. Но он будет менее общим.

Например, вы в конечном итоге будете придерживаться следующих правил:

RewriteEngine On

# force root directory to /site/ (https+www)
RewriteRule ^/?$ https://www.domain.com.br/site/ [R=301,L]

# force any other pages to https+www if not the case already
RewriteCond %{HTTPS} off [NC,OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.domain.com.br%{REQUEST_URI} [R=301,L]
...