jkm

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

Начиная с версии Apache 2.4 есть expr

RewriteEngine on

RewriteRule ^(.+)\((\d+)\)(\.jpg)$ /$1-$2$3 [L,R=301]
RewriteRule ^(.+)\((small)\)((?:-\d+|)\.jpg)$ /$1$2$3 [L,R=301]

RewriteCond expr "tolower(%{REQUEST_URI}) =~ /(.+)/"
RewriteRule [A-Z][^/]*(small|-\d+)\.jpg$ %1 [L,R=301]

Если есть доступ править настройки VirtualHost, то можно использовать RewriteMap.

В VirtualHost добавить:

RewriteMap lc int:tolower

А в .htaccess

RewriteEngine on

RewriteRule ^(.+)\((\d+)\)(\.jpg)$ /${lc:$1}-$2$3 [L,R=301]
RewriteRule ^(.+)\((small)\)((?:-\d+|)\.jpg)$ /${lc:$1}$2$3 [L,R=301]

RedirectMatch 301 ^(.+)\((\d+)\)(\.jpg)$ $1-$2$3

RedirectMatch 301 ^(.+)\((small)\)((?:-\d+|)\.jpg)$ $1$2$3

Или

RewriteEngine on

RewriteRule ^(.+)\((\d+)\)(\.jpg)$ /$1-$2$3 [L,R=301]
RewriteRule ^(.+)\((small)\)((?:-\d+|)\.jpg)$ /$1$2$3 [L,R=301]

RewriteCond %{DOCUMENT_ROOT}/site.%{HTTP_HOST}/$0 -f

RewriteRule ^.+\.(css|js|jpe?g|mp4|gif)$ /site.%{HTTP_HOST}/$0 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

Заблокировать прямое обращение к адресам начинающимся с "/site." можно так:

RewriteCond %{THE_REQUEST} " /site\."

RewriteRule ^site\. - [F]

Или так

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteRule ^site\. - [F]


RewriteCond /site.%{HTTP_HOST}/$0 (.+)
RewriteCond %{DOCUMENT_ROOT}%1 -f
RewriteRule ^wp-content/images/.+\.(css|js|jpe?g|mp4|gif)$ %1 [L]


---------- Добавлено 24.08.2019 в 05:51 ----------

Alfinnov:

пример:
идет запрос:
http://www.veslo.ru/wp-content/images/12323.gif?231ad23
проверяется, есть ли на хостинге файл:
./site.www.veslo.ru/wp-content/images/12323.gif?231ad23
и если есть - отдает его, если файла нет, запрос передается в ./index.php который уже с ним разбирается

Если в названии файла там действительно знак вопроса и содержимое %{QUERY_STRING}, то правила будут такие:

RewriteCond %{QUERY_STRING} ^$

RewriteRule ^wp-content/images/.+\.(css|js|jpe?g|mp4|gif)$ /site.%{HTTP_HOST}/$0 [L]

RewriteCond %{QUERY_STRING} (.+)
RewriteRule ^wp-content/images/.+\.(css|js|jpe?g|mp4|gif)$ /site.%{HTTP_HOST}/$0\%3F%1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

А ещё раз где проверять наличие файла?

/_www.{имя домена из запроса}/wp-content/images/12323.jpg

RewriteCond %{HTTP_HOST} ^(?>www\.|)(.+)

RewriteCond %{DOCUMENT_ROOT}/_www.%1/$0 -f
RewriteRule ^wp-content/images/.+\.jpg$ /_www.%1/$0 [L]

Или /wp-content/images/12323.jpg

RewriteCond %{HTTP_HOST} ^(?>www\.|)(.+)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^wp-content/images/.+\.jpg$ /_www.%1/$0 [L]

RewriteCond %{HTTP_HOST} ^(?>www\.|)(.+) [NC]

RewriteRule ^wp-content/images/.+\.jpg$ /_www.%1/$0 [L]

От перемены мест слагаемых сумма не меняется :)

Там через запятую просто список флагов.

NewMoneyMaker, если /razdel.html существующий файл.

DirectorySlash Off


RewriteEngine on

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^/.]+)$ /$1.html [L]


RewriteCond %{REQUEST_URI} !^/http_only/
RewriteCond %{HTTP:X-Forwarded-Proto} !https [OR]
RewriteCond %{THE_REQUEST} ^\S+\ /index\.php [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^index\.php|(.*) https://site.com/$1 [R=301,L]
Всего: 749