Перенаправить .htaccess через частичную модификацию ссылки в ее середине - PullRequest
1 голос
/ 02 февраля 2020

пожалуйста, покажи мне правильный путь. Я пытаюсь перенаправить

с

example.com/home/<anything>

на

example.com/home-3/<anything>

Мне все еще очень трудно работать с RegExp, более того в .htaccess условных выражениях.

Пожалуйста, покажите мне правильный способ сделать это

Мои базовые c мысли не очень хорошо сыграли:

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_URI} !/home-3/ [NC]
 RewriteRule (.*)/home/(.*) $1/home-3/$2
 </IfModule> 

это ничего не значит с:

https://example.com/home/information/work

но должен стать

https://example.com/home-3/information/work

Однако php -обращение будет выполнено правильно с: (header.php)

IF ( ($do_redirect=true) == true) {{{
            $address=$_SERVER['REQUEST_URI'];

            $addrstart = substr($address,0,15);
            $sch = strpos($addrstart,'home/');


            if ($sch!== false) {
                $ndl = 'home/';
                $nw = 'home-3/';
                    $rezz = str_replace($ndl,$nw,$address);
                    $address = $rezz;

                    header("Location: https://egf.ru/".$urrr);
                    die;
            } 

}}}

Так что я пытаюсь сделать то же самое через .htaccess вместо местоположения заголовка.

Добавлено: ftp ht1 ht2 ht_tries_out Я пробовал каждую из этих комбинаций через личную вкладку, закрывая одно последнее закрытое окно и открывая его каждый раз.

Я также пытался проверить один из Redirect на изображении ht2 - он также дал мне 404 /

Я думаю, что ИЛИ htaccess как-то действительно не работает с WordPress (0_o) ИЛИ Я потерял что-то фундаментальное /

Так что я был вынужден перепроверить еще раз, что я делаю ne следующий: Раскомментировал все варианты: totAL war

и он также ничего не делает (404) дома / .. адресация всех home-3 работает нормально

Обновление через 7 минут, сервер не работает ftp, нет ответа, сайт egf.ru - нет ответа. последняя модификация htacces следующая: last one htaccess modification выглядит как не циклично c рекурсия, все проверки htaccess не сообщают об ошибках.

Не знаю, это провайдерская ошибка или моя.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Чтобы «перенаправить» с /home/<anything> на /home-3/<anything>, вы можете сделать что-то вроде следующего, используя mod_rewrite вверху вашего .htaccess файла:

RewriteEngine On

RewriteRule ^home/(.*) /home-3/$1 [R=302,L]

Хотя вам не обязательно Для этого mod_rewrite достаточно простого mod_alias Redirect (который соответствует префиксу):

Redirect 302 /home/ /home-3/

/home/<anything> неявно перенаправляется на /home-3/<anything> из-за характера соответствия префикса Redirect директива. Все после совпадения копируется в конец целевого URL.

Однако я подозреваю, что у вас уже есть другие перезаписи mod_rewrite (для маршрутизации URL), поэтому вам может потребоваться решение mod_rewrite, указанное выше, чтобы избегайте конфликтов.


Глядя на ваши директивы ...

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_URI} !/home-3/ [NC]
 RewriteRule (.*)/home/(.*) $1/home-3/$2
 </IfModule>

Это не совпадет /home/information/work из-за первого sla sh префикс в регулярном выражении (.*)/..... Но в вашем примере URL-адреса показывают /home/ в начале пути URL-адреса, поэтому перед ним ничего не найдено. Итак, ^home/(.*) будет достаточно. ^ является началом строки привязкой , поэтому шаблон должен находиться в начале URL-пути.

RewriteCond %{REQUEST_URI} !^/home-3 [NC]
RewriteCond %{REQUEST_URI} !^$ 
RewriteRule "^home(.*)" "home-3$1" [L]

" Рабочий код в вашем удаленном ответе имел более сложное правило. Однако это соответствует /home<anything>, а не /home/<anything> (как указано в вашем вопросе), что усложняет ситуацию. Первое условие (директива RewriteCond) необходимо для предотвращения перезаписи l oop* 1 . Второе условие здесь не требуется, поскольку условие должно быть истинным, если RewriteRule уже соответствует.

* 1 Обратите внимание, что это правило внутренняя перезапись (URL не изменяется для пользователя), а не внешнее «перенаправление», как указано в вашем вопросе. Обратите внимание, что указанный вами PHP код работает нормально, это внешнее «перенаправление», а не перезапись.

0 голосов
/ 02 февраля 2020

Прочитал много руководств, чтобы понять топи c и написать правильные команды.

Пожалуйста, извините за такой глупый вопрос. Чтобы понять это, потребовалось много времени)

Но полное и окончательное заключение было достигнуто с помощью отладчика .htaccess =))

Итак, окончательный рабочий код =>

RewriteBase /

RewriteCond %{REQUEST_URI} !^/home-3 [NC]
RewriteCond %{REQUEST_URI} !^$ 
RewriteRule "^home(.*)" "home-3$1" [L]

enter image description here

...