Помогите с rewrite в .htaccess

Andreyka
На сайте с 19.02.2005
Offline
822
377

Суть проста

Вся статика лежит в директории static/

Когда запрос идет на сайт http://site.ru/img/logo.gif то должен быть рерайт на static/img/logo.gif

А если такого нет - то рерайт на index.php в корневой директории

Вроде задача тривиальная, а запутался :confused:

Не стоит плодить сущности без необходимости
[Удален]
#1

RewriteEngine on

RewriteBase /

#Если .htm файл устанавливаем переменную окружения HTM=1

RewriteRule ^static/(.*)$ $1 [C,E=HTM:1]

#Проверяем существует ли файл на диске

RewriteCond %{REQUEST_FILENAME}.html -f

#Если существует делаем редирект

RewriteRule ^(.*)$ static/$1
# если не сеществует и переменная окружения HTM=1 показываем запрошенный .htm
RewriteCond %{ENV:HTM} ^1$
RewriteRule ^(.*)$ index.php

как то так!

siv1987
На сайте с 02.04.2009
Offline
427
#2

RewriteEngine On

RewriteBase /

#есть

RewriteCond %{REQUEST_URI} !^/static/

RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|css|js|jpf)$

RewriteCond %{DOCUMENT_ROOT}/static%{REQUEST_URI} -f

RewriteRule . /static%{REQUEST_URI} [L]

#нету

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|css|js|jpf)$

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule . index.php [L]

Andreyka
На сайте с 19.02.2005
Offline
822
#3

siv1987, этот вариант работает, но имеет существенный недостаток - там указываются расширения статики

А мне надо чтоб работало с разными расширениями без перечислений

Andreyka
На сайте с 19.02.2005
Offline
822
#4

Плюс еще одно - эти правила не работают при вложенных директориях

Видать не такая уж простая задача ;)

---------- Добавлено 16.12.2013 в 11:07 ----------

В общем получилось так:

RewriteCond %{REQUEST_URI} !^/static/

RewriteCond %{DOCUMENT_ROOT}/static%{REQUEST_URI} -f

RewriteRule . /static%{REQUEST_URI} [L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule . /index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule . /index.php [L]

Не знаю насколько корректно, но работает

siv1987
На сайте с 02.04.2009
Offline
427
#5
Andreyka:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L]

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

По сути это одно и тоже, так что один из блоков можно убрать.

По поводу вложенных директорий вроде бы должно работать.

В принципе все довольно корректно, просто без указания расширений все несуществующие запросы будут реврайтится на index.php

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