DomenForum.net

DomenForum.net (https://domenforum.net/index.php)
-   Программирование (https://domenforum.net/forumdisplay.php?f=26)
-   -   htaccess: перенаправление адреса из ЧПУ (https://domenforum.net/showthread.php?t=220868)

Port_Artur 12.06.2019 17:54

htaccess: перенаправление адреса из ЧПУ
 
Нужно перенаправить только 2-ю строку из списка ниже на 1-ю строку из списка, чтобы 3-ю строку и последующие правило не затрагивало

1. http://сайт/moskva/
2. http://сайт/moskva/mehanik/
3. http://сайт/moskva/mehanik/ivanov/

miketomlin 13.06.2019 12:17

В лоб RewriteRule или RedirectMatch с указанием символов начала и конца регулярки.

Если обобщенно, опираясь на кол-во компонентов пути, то по какой-то такой маске: ^(/?.+/).+/$

В реале вариатив /? не нужен. Просто в контексте .htaccess у первой директивы нету вед. слэша в обрабатываемой строке, а у второй есть.

pegs 14.06.2019 13:37

Цитата:

Сообщение от miketomlin (Сообщение 1488104)
Если обобщенно, опираясь на кол-во компонентов пути, то по какой-то такой маске: ^(/?.+/).+/$

Точка в ".+" сожрёт и символ "/". Следует использовать "[^/]+".

Для .htaccess (RewriteRule) версии: ^([^/]+/)[^/]+/$

Port_Artur 16.06.2019 13:36

Мне бы конкретное решение на мой пример

Цитата:

Сообщение от Port_Artur (Сообщение 1488086)

вот мой .htaccess:

Код HTML:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^fbclid
RewriteRule ^(.*)$ /$1? [R=301,L]
</IfModule>

# 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
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>


pegs 16.06.2019 14:07

Если "постоянный" редирект:
Код:

RewriteRule ^([^/]+/)[^/]+/$ /$1 [L,R=301]
После второго блока.

miketomlin 16.06.2019 23:25

Цитата:

Сообщение от pegs (Сообщение 1488147)
Точка в ".+" сожрёт и символ "/". Следует использовать "[^/]+".

Тут для удобства кванторы считаются ленивыми по умолчанию, поэтому нет необходимости использовать ленивые кванторы явно. Ваш вариант тоже норм. Чем строже регулярка, тем лучше.

добавлено через 19 минут
Цитата:

Сообщение от Port_Artur (Сообщение 1488244)
Мне бы конкретное решение на мой пример

Для конкретных значений, т.е. в лоб? Я написал словами, например:
Код:

RedirectMatch ^/moskva/mehanik/$ /moskva/

pegs 17.06.2019 00:19

Цитата:

Сообщение от miketomlin (Сообщение 1488316)
Тут для удобства кванторы считаются ленивыми по умолчанию

Так вроде Апач использует PCRE, где по-умолчанию действуют Perl правила (в которых кванторы жадные). Или ошибаюсь?

Port_Artur 17.06.2019 15:32

Цитата:

Сообщение от miketomlin (Сообщение 1488316)
Для конкретных значений, т.е. в лоб? Я написал словами, например:
Код:

RedirectMatch ^/moskva/mehanik/$ /moskva/

Спасибо

miketomlin 20.06.2019 11:07

Цитата:

Сообщение от pegs (Сообщение 1488323)
Или ошибаюсь?

Я же написал, что тут ленивые. Видимо, для удобства непросвещенной публики так сделано.

pegs 20.06.2019 11:58

Цитата:

Сообщение от miketomlin (Сообщение 1488558)
Я же написал, что тут ленивые.

Это где-то в документации Апача написано? Или методом эксперимента?


Текущее время: 06:25. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Техническая поддержка — DevArt.PRO. Перевод: zCarot.