jkm

Рейтинг
120
Регистрация
20.02.2014

Шаблон ^blog/(.+)$ совпадет не только с /blog/post, но и с /blog/post.html, так что в итоге произойдёт зацикливание /blog/post.html.html и тд.

Самый простой способ исправить это заменить (.+) на ([^.]+) тогда шаблон не совпадет с адресами, где есть точка.


RewriteRule ^blog/([^.]+)$ /blog/$1.html [R=301,L]
medclick:
Помогите пожалуйста сделать универсальное правило для 301 редиректа:

Со старого:
/about/&page=2

На новый
/about/page/2/


RewriteRule ^about/&page=(\d+)$ /about/page/$1/ [R=301,L]

Нужен модификатор шаблона PCRE_DOTALL http://php.net/manual/ru/reference.pcre.pattern.modifiers.php


$count_query = preg_replace('|select.+from|s', 'SELECT count(*) FROM ', $count_query);

Правила для редиректа должны стоять выше правил для ЧПУ.

RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]

RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

RewriteRule ^category/(.+)$ httр://site.ru/$1 [R=301,L]

Эти строки нужно перенести в начало файла.

Должно получиться примерно так:


Options +FollowSymLinks -Indexes

RewriteEngine On

RewriteRule ^category/(.+)$ httр://site.ru/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]


www.site.ru/page/ => www.site.ru/page
site.ru/page/ => www.site.ru/page
site.ru/page => www.site.ru/page

Правила применяются последовательно и нужно их расставить в правильном порядке.

Первым идёт редирект всего что со слэшем в конце.

Вторым идёт редирект для www.


RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ http://www.site.ru/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]


RewriteCond %{THE_REQUEST} " (/vitrina/svarochnye-apparaty\?.*)/modal"
RewriteRule ^ %1 [R=301,L]

Или так


RewriteCond %{QUERY_STRING} ^(.*)/modal
RewriteRule ^vitrina/svarochnye-apparaty$ /$0?%1 [R=301,L]

В принципе верно только в шаблоне исправить ^/ на ^, т.к. строка, с которой работает RewriteRule, не начинается с "/".

Это подробно описано в статье https://habrahabr.ru/company/sprinthost/blog/129560/ .

Флаг [R] даёт редирект с кодом 302.

Для редиректа 301 нужно [R=301,L].

Например, так:


RewriteCond %{DOCUMENT_ROOT}/$1.htm -f
RewriteRule ^(load/papka/[^/]+)$ $1.htm

RewriteCond %{THE_REQUEST} " /\?(\S+) "
RewriteCond %{DOCUMENT_ROOT}/-%1.htm -f
RewriteRule ^ -%1.htm

Почему не работает RewriteRule ^\?(.*)$ -$1\.htm и как составлять правила хорошо расписано в статье https://habrahabr.ru/company/sprinthost/blog/129560/.


\[.*\] \[.*\] \[.*\] \[client <HOST>.* WP LOGIN FAILED.*

Или даже так


\[client <HOST>.* WP LOGIN FAILED

Редирект происходит когда в ErrorDocument указан полный адрес с http.

Нужно поменять адрес на относительный.


ErrorDocument 404 /s/missing.html
Всего: 749