Перенаправить http на https и www to non- www in .htaccess - PullRequest
1 голос
/ 11 февраля 2020

Прежде всего, я знаю, что есть много ответов на этот вопрос, но на самом деле я не нахожу тот, который работает. Это то, что у меня есть в файле .htaccess прямо сейчас, и я хочу упомянуть, что оно работало ранее, но больше не работает.

Redirect 301 /unt-de-cacao-de-plaja/filtre/producator/crisnatur/ /ingrijire-corporala/unt-cacao/unt-de-cacao-pentru-plaja-100g

Options +FollowSymlinks

# Prevent Directoy listing
Options -Indexes

# Prevent Direct Access to files
<FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
 Require all denied
## For apache 2.2 and older, replace "Require all denied" with these two lines :
# Order deny,allow
# Deny from all
</FilesMatch>

# SEO URL Settings
RewriteEngine On
# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

# FORCE HTTPS AND NON WWW
RewriteEngine on

RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Как упоминание, у меня будет много Redirect 301 от старых страниц к новым, так как вся структура была изменена.

А ссылки, которые я перенаправляю на мой сайт, идут с "www", как:

https://www.example.com/unt-de-cacao-de-plaja/filtre/producator/crisnatur/

и нужны быть перенаправленным на:

https://example.com/ingrijire-corporala/unt-cacao/unt-de-cacao-pentru-plaja-100g

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Перенаправление на https и non- www*1003*

Чтобы вместо этого перенаправить все запросы на https и non-www, используйте следующий код вместо предыдущего:

Canonical HTTPS / non- WWW*1010* <IfModule mod_rewrite.c> RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] RewriteRule (.*) https://example.com/$1 [L,R=301] </IfModule> Как и раньше, поместите этот код в root .htaccess вашего сайта. Вот что он делает: Проверяет, доступен ли mod_rewrite Проверяет, выключен ли HTTPS или запрос включает www*1022* Если какое-либо условие соответствует, запрос квалифицируется и перенаправляется на https / non- www address ИЛИ RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

1 голос
/ 12 февраля 2020

Несколько вопросов в порядке важности:

  1. У вас есть канонический HTTP для HTTPS и www to non- www redirects в конце файла. Поместив его в конец файла, после вашего front-controller , он просто никогда не будет обрабатываться для большинства запросов. Это должно быть около начала файла .htaccess, до вашего фронт-контроллера .

  2. Следует избегать смешивания перенаправлений из оба mod_alias (Redirect) и mod_rewrite (RewriteRule) в одной и той же области видимости. Различные модули выполняются в разное время на протяжении всего запроса, несмотря на их очевидный порядок в файле конфигурации. Поскольку mod_rewrite требуется для других перенаправлений, вам следует преобразовать директивы mod_alias Redirect для использования RewriteRule.

    Например:

    RewriteRule ^unt-de-cacao-de-plaja/filtre/producator/crisnatur/$ /ingrijire-corporala/unt-cacao/unt-de-cacao-pentru-plaja-100g [R=301,L]
    
  3. Вы должны включите каноническую схему и имя хоста в ваши перенаправления URL, чтобы избежать множественных перенаправлений при запросе «старого» URL по неканонической схеме от имени хоста.

    Например:

    RewriteRule ^unt-de-cacao-de-plaja/filtre/producator/crisnatur/$ https://example.com/ingrijire-corporala/unt-cacao/unt-de-cacao-pentru-plaja-100g [R=301,L]
    
  4. В зависимости от того, что именно вы подразумеваете под «большим количеством Redirect 301» - вам не следует делать это вообще в .htaccess и вместо этого перенаправлять в свой серверный скрипт, как только вы определили, что запрос будет 404. Это делается для того, чтобы отдавать предпочтение обычным посетителям сайта, а не вашим перенаправлениям (которые выполняются при каждом отдельном запросе).


RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Поскольку вы заявил, что эти директивы работали ранее, тогда я предполагаю, что использование переменной HTTPS environment нормально в вашей системе. Но обратите внимание, что, хотя это относительно часто, это нестандартный . (Это подразумевает, что сервер использует какой-то интерфейс / прокси-сервер SSL.)

Обратите внимание, что порядок этих правил приведет к двойному перенаправлению при запросе http://www.example.com/<anything> (HTTP + www)., что необходимо, если вы реализуете HSTS , но в противном случае вам следует отменить эти два правила, чтобы избежать этого ненужного двойного перенаправления.

...