Поддержка Проблемы и решения Перенаправление в .htaccess

  • В вордпресе недавно. Друг попросил посмотреть, что-то его сайт не перенаправляет с http в https

    На джумле это делал так:

    RewriteEngine On
    RewriteRule ^(.*)$ index.php [F,L]
    
    RewriteCond %{HTTP_HOST} ^www [NC,OR]
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://мой сайт.net/$1 [L,R=301]

    А для Вордпресса эти правила такие же или нужно что-то менять?
    Версия wordpress-5.3.2
    Спасибо за подсказку!

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Модератор Юрий

    (@yube)

    А для Вордпресса эти правила такие же или нужно что-то менять?

    Апачу вообще-то совершенно без разницы кто потом будет обрабатывать запрос.

    значит, так понял, такие же правила без всяких мелких доработок?

    а если у меня нету файла .htaccess его нужно создать типа такой:

    # BEGIN WordPress
    
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # END WordPress

    и какие строчки из стандартного файла добавить иил убрать дял перенаправления?

    Вот так, правильно:

    # BEGIN WordPress
    
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^(.*)$ index.php [F,L]
    RewriteCond %{HTTP_HOST} ^www [NC,OR]
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://meirbruk.net/$1 [L,R=301]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    
    </IfModule>
    
    # END WordPress
    • Ответ изменён 1 месяц назад пользователем elimelech.
    • Ответ изменён 1 месяц назад пользователем elimelech.
    Модератор Юрий

    (@yube)

    такие же правила без всяких мелких доработок?

    В общем случае — да. От движка это не зависит, но зато зависит от конфигурации сервера.

    а если у меня нету файла .htaccess

    Такой .htaccess нужен для работы ЧПУ. Если оно не включено (ссылки вида ?p=1), то и .htaccess не нужен.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Вот так, правильно

    Между # BEGIN WordPress и # END WordPress лучше ничего не менять, эти изменения будут перезаписаны. Свои правила рекомендуется добавлять перед этим фрагментом.

    Такой .htaccess нужен для работы ЧПУ. Если оно не включено (ссылки вида ?p=1), то и .htaccess не нужен.

    И где ЧПУ в Worpresse включить?

    • Ответ изменён 1 месяц назад пользователем elimelech.
    Модератор Юрий

    (@yube)

    И где ЧПУ в Worpresse включить?

    В настройках постоянных ссылок.

    Эти ЧПУ надо включать до того как я пропишу эти правила или после? :

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{ENV:HTTPS} !=on
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
    
    # BEGIN WordPress
    RewriteRule ^index\.php$ — [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
    Модератор Юрий

    (@yube)

    Эти ЧПУ надо включать

    А надо?

    Редирект на https абсолютно никак не связан с наличием или отсутствием ЧПУ.

    Если Вы хотели спросить про место в файле, то проыерку протокола логично выполнять до проверки наличия файла/директории.

    Ваш пример .htaccess некорректен: нельзя разрывать блок wordpress на куски, т.к. если/когда он перезапишется в свой оригинальный вид, то сломает логику IfModule.

    Вы хотите сказать, что надо вот так написать? :

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{ENV:HTTPS} !=on
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
    
    RewriteRule ^index\.php$ — [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress

    Я не понимаю, что там ворпресс перезаписывает в .htaccess? Что значит перезаписывает?

    • Ответ изменён 1 месяц назад пользователем elimelech.

    что там ворпресс перезаписывает в .htaccess?

    Все, что находиться между # BEGIN WordPress и # END WordPress

    Что значит перезаписывает?

    Удаляет то что есть и пишет то, что считает нужным.

    Модератор Юрий

    (@yube)

    Вы хотите сказать, что надо вот так написать? :

    Нет. Вот этот фрагмент вообще не трогаем

    
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # END WordPress
    

    Свои правила пишем либо до него, либо после.

    Что значит перезаписывает?

    Это значит, что все от # BEGIN WordPress и до # END WordPress удаляется и вписывается то, что движок считает правильным.

    Вообще-то, WP сейчас это всё прямо в htaccess и пишет:

    # Строки междуBEGIN WordPressиEND WordPress были созданы автоматически.
    # Они могут быть изменены только фильтрами WordPress.
    # Все изменения между этими отметками будут перезаписаны.

    • Ответ изменён 1 месяц назад пользователем Юрий.

    Но почему-то получается двойной редирект если проверить адрес типа http://www.мой.сайт
    , т.е сначало перенаправляет на сайт https://www.мой.сайт, а потом с https://www.мой.сайт на https://мой.сайт

    Что там добавить чтобы одним редиректом перенаправляло сразу куда надо?

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
    RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
    RewriteRule ^(.*)$ index.php [F,L]
    
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
Просмотр 13 ответов — с 1 по 13 (всего 13)