Перенаправить все страницы на главную, кроме двух страниц

#regex #apache #.htaccess #mod-rewrite

#регулярное выражение #apache #.htaccess #мод-перезапись

Вопрос:

Корневой каталог — это файл index.php и файл конфигурации .htaccess. Как сделать 301 перенаправление всех URL-адресов в / (главная страница), кроме URL’а со строкой http: //mysite.loc/1, http: //mysite.loc/2 и http: //mysite.loc /?

Например:

 http: //mysite.loc/ (URL available, show index.php)
http: //mysite.loc/1 (URL available, show index.php)
http: //mysite.loc/2 (URL available, show index.php)
http: //mysite.loc/testing (301 redirect on /)
http: //mysite.loc/qwerty (301 redirect on /)
  

Проблема заключается в бесконечных перенаправлениях на главную страницу.

Примечание: Вы должны создать правило только в файле конфигурации .htaccess, PHP-скрипты использовать нельзя.

Все доступные URL ведут на / (index.php файл)

Ответ №1:

Вы можете использовать это правило в качестве самого первого правила:

 RewriteEngine On

# remove index.php
RewriteCond %{THE_REQUEST} /index.php [NC]
RewriteRule ^(.*/)?index.php$ /$1 [L,R=301,NE]

RewriteRule !^(1|2|index.php)?/?$ / [L,R=301]

RewriteRule ^(1|2)?/?$ index.php [L]
  

Очистите кэш браузера перед тестированием этого изменения.

Комментарии:

1. Это работает, но необходимо, чтобы mysite.loc / send отображал содержимое index.php

2. Извините, mysite.loc/1 или mysite.loc/2 показывают index.php

3. Три адреса 1) mysite.loc 2) mysite.loc /1 3) mysite.loc / 2 должны демонстрировать один и содержимое из файла index.php .

4. Перенаправить на /. Потому что этот URL-адрес не является / или / 1 или / 2.

5. Работает! Большое вам спасибо за то, что помогли мне сегодня. Несколько дней думал об этой проблеме.

Ответ №2:

Что-то вроде этого должно работать:

 RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteCond %{REQUEST_URI} !/(1|2) [NC]
RewriteRule ^(.*)$ / [L,R=301]
  

Комментарии:

1. Сервер пересылает запрос на этот адрес, чтобы он никогда не заканчивался. У меня та же ошибка 🙂

2. Скорее всего, потребуется перезаписать второй% {ENV: REDIRECT_STATUS} ^ $. Но пока я не понимаю, как это применить.