Опять по htaccess вопрос, очень надо

123
J
На сайте с 20.02.2014
Offline
120
jkm
#11


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]
A
На сайте с 07.01.2010
Offline
123
#12

тут возникает проблемма, что файлы из корня будут доступны по прямому запросу, а не должны, для остальных всех редирект на index.php

у картинок итд может в конце идти знак вопроса и параметры, а может и не идти

Создаем и продвигаем сайты различных тематик
J
На сайте с 20.02.2014
Offline
120
jkm
#13

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

RewriteCond %{THE_REQUEST} " /site\."

RewriteRule ^site\. - [F]

Или так

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteRule ^site\. - [F]
S
На сайте с 30.09.2016
Offline
469
#14

Я удивляюсь, как вы двое друг друга понимаете? Один пишет

Alfinnov:
файлы из корня будут доступны по прямому запросу, а не должны,
а другой в ответ пишет
jkm:

RewriteRule ^site\. - [F]
Лично я уже вообще ничего не понимаю из этого топика. 🙄
Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
A
На сайте с 07.01.2010
Offline
123
#15

Мде, я уже не знаю как проще объяснить задачу ...

есть проксирующий скрипт, он лежит в корне сайта. его задача - пришедший на него запрос - выкачать с удаленного сервера и отдать клиенту.

он складываешь данные для кеша в папку:

./site.{адрес сайта}/ <--- тут лежат файлы удаленного сайта.

в коре ./ - лежат файлы, доступа к которым на прямую быть не должно, это организовывается сейчас так, что все запросы идут через /index.php который уже подставляет данные из ./site.{адрес сайта}/... и отдает клиенту.

цель:

написать htaccess , так что-бы:

1. если запрашиваемый файл существует (но в папке) ./site.{адрес сайта}/ - отдать его (это касается только статичных рессурсов jpg/png/gif/css/js)

2. если файла в папке нет, то запрос должен идти на /index.php

я уже не знаю как проще можно что-то описать. это же только другими словами и примерами было во всех моих сообщениях

// а вот это не работает:

RewriteCond %{QUERY_STRING} ^$

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

---------- Добавлено 24.08.2019 в 12:22 ----------

так-же я что-то не понимаю, почему даже такое:

RewriteCond %{REQUEST_URI} \.(jpg)$

RewriteRule ^(.*)$ ./www.vasaya.ru/wp-content/images/484/2605s.jpg [L]

вызывает 500 ошибку что в этом то простом не верно может быть?

---------- Добавлено 24.08.2019 в 12:38 ----------

А правила вида:

RewriteCond %{QUERY_STRING} ^$

RewriteCond %{REQUEST_URI} \.(css|js|jpe?g|mp4|gif) [NC]

RewriteCond /www.%{HTTP_HOST}%{REQUEST_URI} -f

RewriteRule ^/(.*)$ /www.%{HTTP_HOST}/$0 [R=302,L,END]

приводят вообще вот к такой переадресации (после 20 переходов)

Адрес: http://www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/www.www.vasya.ru/pages/images/484/2605s.jpg [переход]

IL
На сайте с 20.04.2007
Offline
435
#16
Alfinnov:
в коре ./ - лежат файлы, доступа к которым на прямую быть не должно,

Т.е.

1) в корне получается 100500 файлов?

2) они все статика

3) другой статики в корне нет?

4) в корне есть index.php, который "умеет" выкачивать?

В корне для всех нужных URL-ов (как их определять, исходя из условий выше.. примерно так.. при необходимости скорректировать для тех адресов, которые должны "проходить" без реврайта ) делаем реврайт на подпапку

RewriteRule ^(.*)\.(jpe?g|gif|png)$ site/$0 [L]

В подпапке добавляем .htaccess, в котором для отсутствующих файлов дёргаем скачивалку (пожалуй, лучше не из корня, а уже из папки)

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

p.s. Доработать напильником.. =)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
S
На сайте с 30.09.2016
Offline
469
#17
Alfinnov:

RewriteRule ^(.*)$ ./www.vasaya.ru/wp-content/images/484/2605s.jpg [L]

вызывает 500 ошибку что в этом то простом не верно может быть?

Как раз здесь всё очевидно - нет такого адреса, куда идёт рерайт. В логах сервера можете увидеть описание ошибки.

A
На сайте с 07.01.2010
Offline
123
#18

так, написал такое пока что...

RewriteCond %{QUERY_STRING} ^$

RewriteCond %{REQUEST_URI} \.(css|js|jpe?g|mp4|gif) [NC]

RewriteRule ^(.*)$ /site.%{HTTP_HOST}/$0 [R=302,L]

делаю запрос:

http://vasya.ru/content/images/484/2605s.jpg

идет переадресация на http://vasya.ru/site.vasya.ru/wp-content/images/484/2605s.jpg

и все норм ... но мне надо проверить на существование этого файла.

а когда делаю:

RewriteCond %{QUERY_STRING} ^$

RewriteCond %{REQUEST_URI} \.(css|js|jpe?g|mp4|gif) [NC]

RewriteCond /site.%{HTTP_HOST}%{REQUEST_URI} -f

RewriteRule ^(.*)$ /site.%{HTTP_HOST}/$0 [R=302,L]

уже не работает правило, почему-то тут не корректно :/ хотя файл существует и как-бы все должно быть норм

подскажите с этим?

A
На сайте с 07.01.2010
Offline
123
#19

так, задачу вроде как решил.

вот правила что получились

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{QUERY_STRING} ^$

RewriteCond %{REQUEST_URI} \.(css|js|jpe?g|mp4|gif) [NC]

RewriteCond %{REQUEST_URI} !^(\/site\.) [NC]

RewriteCond /site.%{REQUEST_FILENAME} -f

RewriteRule ^(.*)$ /site.%{HTTP_HOST}/$0 [L]

RewriteCond %{REQUEST_URI} !^(\/site\.) [NC]

RewriteRule ^(.*)$ index.php [L]

</IfModule>

вроде как работает, хостинг тупит по страшному, почему-то цепляет жутко старые правила где редиректы были, хз как там htaccess обновить что-б сервер их перечитал ... но на других хостах все работает

J
На сайте с 20.02.2014
Offline
120
jkm
#20

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]
123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий