Как в WP сделать редирект со всех страниц на главную сайта

Дмитрий
На сайте с 02.04.2020
Offline
50
197

Как в WP сделать редирект со всех страниц на главную сайта? НО при этом оставить админку, робот и карту сайта без редиректа + ещё какие-то страницы если появится необходимость

Вот мой  .htaccess:

# BEGIN WordPress

<IfModule mod_rewrite.c>

RewriteEngine On

# Исключить перенаправление с главной страницы на себя и для специфических файлов и директорий

RewriteCond %{REQUEST_URI} !^/($|wp-admin|wp-login\.php|robots\.txt)

# Перенаправить все остальные страницы на главную страницу

RewriteRule ^(.*)$ https://site.com/ [R=301,L]

# Стандартные правила WordPress

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteBase /

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

</IfModule>

# END WordPress


Редирект со всех страниц отрабатывает, НО почему то редиректит и  robots.txt с /sitemap_index.xml , которые по идее не дожны редиректится так как прописаны в RewriteCond 

Подскажите плиз как правильно


Виктор Горняков
На сайте с 25.09.2006
Offline
162
#1
Дмитрий :

Как в WP сделать редирект со всех страниц на главную сайта? НО при этом оставить админку, робот и карту сайта без редиректа + ещё какие-то страницы если появится необходимость

Вот мой  .htaccess:

# BEGIN WordPress

<IfModule mod_rewrite.c>

RewriteEngine On

# Исключить перенаправление с главной страницы на себя и для специфических файлов и директорий

RewriteCond %{REQUEST_URI} !^/($|wp-admin|wp-login\.php|robots\.txt)

# Перенаправить все остальные страницы на главную страницу

RewriteRule ^(.*)$ https://site.com/ [R=301,L]

# Стандартные правила WordPress

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteBase /

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

</IfModule>

# END WordPress

Редирект со всех страниц отрабатывает, НО почему то редиректит и  robots.txt с /sitemap_index.xml , которые по идее не дожны редиректится так как прописаны в RewriteCond 

Подскажите плиз как правильно


Может так?

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{REQUEST_URI} !^/wp-login.php
RewriteCond %{REQUEST_URI} !^/sitemap.xml
RewriteCond %{REQUEST_URI} !^/robots.txt
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.*)$ / [R=301,L]

А вообще рекомендую php скрипт любой админки иди определенного доступа подкрепить кодом (вначале php файла , после <?php добавить):

$login_successful = false; 
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])){
$usr = $_SERVER['PHP_AUTH_USER'];
$pwd = $_SERVER['PHP_AUTH_PW'];
if ($usr == 'admin007' && $pwd == '123456'){ //сменить на свое
$login_successful = true; }} if (!$login_successful){
header('WWW-Authenticate: Basic realm="Secret page"');
header('HTTP/1.0 401 Unauthorized');
print "Login failed!";
} else {

//.... весь код и перед закрытием тега ?> в конце добавить

}
XMLSeo - поисковая выдача Яндекс, Wordstat, Google через API - https://xmlseo.ru
J
На сайте с 20.02.2014
Offline
120
jkm
#2

Дмитрий :

Редирект со всех страниц отрабатывает, НО почему то редиректит и  robots.txt с /sitemap_index.xml , которые по идее не дожны редиректится так как прописаны в RewriteCond 

Как на самом деле работает mod_rewrite.

Изменение запроса не заканчивается на последнем RewriteRule. После того, как сработало последнее правило RewriteRule и был добавлен RewriteBase, mod_rewrite смотрит, изменился запрос или нет. Если запрос изменился, его обработка начинается заново с начала .htaccess.

RewriteRule . /index.php [L]

Это правило изменит запрос /robots.txt на /index.php и обработка начнётся заново.
В %{REQUEST_URI} будет /index.php и теперь сработает правило:

RewriteCond %{REQUEST_URI} !^/($|wp-admin|wp-login\.php|robots\.txt)
RewriteRule ^(.*)$ https://site.com/ [R=301,L]

Достаточно добавить проверку переменной %{ENV:REDIRECT_STATUS}. Там сохраняется статус предыдущего перенаправления и при первом проходе там пусто.

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !^/($|wp-admin|wp-login\.php|robots\.txt|sitemap(|_index)\.xml)
RewriteRule ^(.*)$ https://site.com/ [R=301,L]


Ещё вариант вместо %{REQUEST_URI} использовать %{THE_REQUEST}. Её содержимое не меняется при перенаправлении.

Там строка HTTP-запроса "GET /path?query HTTP/1.1".

RewriteCond %{THE_REQUEST} "!^\S+ /([? ]|wp-admin|wp-login\.php|robots\.txt|sitemap(|_index)\.xml)"
RewriteRule ^(.*)$ https://site.com/ [R=301,L]
fliger
На сайте с 17.09.2015
Offline
107
#3
jkm #:
RewriteCond %{THE_REQUEST} "!^\S+ /([? ]|wp-admin|wp-login\.php|robots\.txt|sitemap(|_index)\.xml)"
Интересно вы регулярки пишете.
W1
На сайте с 22.01.2021
Offline
285
#4
Дмитрий :

Вот мой  .htaccess:

# BEGIN WordPress

Не надо лезть в   # BEGIN WordPress

Мой форум - https://webinfo.guru –Там я всегда на связи
W1
На сайте с 22.01.2021
Offline
285
#5
Дмитрий :
# Исключить перенаправление с главной страницы на себя и для специфических файлов и директорий

Возможно, нужно исключить  перенаправление всех файлов и директорий:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий