#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} ^ $. Но пока я не понимаю, как это применить.