mod_Rewrite - наверное всех задолбал)
Всем привет, передо мной встала одна задачка и я пытался её решить так:
Код:
RewriteEngine on Помогите найти ошибку или возможно другое решение. |
м.б. тормознуть поиск, если есть совпадение в той строке?
Цитата:
|
Нет не получится.
Я понял почему всеравно выполняется index.php, но не допру как решить, как я понимаю нада улучшить регулярку для второго выражения и исключить первое, но в таком случаи при прямом запросе на css.php он будет его выполнять:( Просто правила обходятся три раза, в первый ставиться css.php далее апач снова запускает его и уже меняет на index.php, далее проходит ещё раз, но уже ничего не меняет и останавливается. |
теперь можно вздохнуть спокойно:)
Я решил свою проблему, остановив цикл с помошью переменной окружения и получилось вот так: Код:
RewriteEngine on Остался самый главный вопрос, как вам подобное решение, говнокод или нет и что посоветуете изменить? |
Цитата:
а вообще, так можно еще сделать (помимо копирования переменных в подзапрос с префиксом REDIRECT_ появляется переменная REDIRECT_STATUS): RewriteRule ^css/\w+\.css$ css.php RewriteCond \$0 !=css.php [OR] RewriteCond %{REQUEST_URI} =/css.php RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteRule .* index.php кроме того, непонятно, зачем NC. Непонятно, зачем нужен NE, он предотвращает экранирование специальных символов (?, &, #) в замещающей строке (до подстановки переменных), причем я не придумал других вариантов использования кроме как для #: RewriteRule ^f success#f [R,NE] # без NE будет так: success%23f Непонятно, зачем QSA. Он нужна, когда в замещающей строке указаны параметры и надо к ним добавить параметры из запроса: RewriteRule .* index.php?rewrite [QSA] # index.php?rewrite&a=1&b=2... по умолчанию, если в замещающей строке присутствуют параметры, параметры запроса не добавляются. Если же параметры отсутствуют в замещающей строке - используются параметры запроса. Т.е. указывая параметры в замещающей строке, мы переопределяем параметры запроса, если не добавлять QSA :) добавление L на автомате - дурная привычка зачем нужны эти внутренние перенаправления, насколько я понимаю... Во-первых они происходят только для правил в .htaccess, когда они изменяют URL. Во-вторых, правила в httpd.conf и в .htaccess выполняются на разных этапах обработки запроса. Первые - при преобразовании url в имя файла, потом на основе этого имени файла выполняются директивы в соответствующих .htaccess-файлах. Поэтому, если мы изменили имя файла, надо выполнить для него директивы из соответствующих ему .htaccess-файлов, для этого делается подзапрос. |
Почему не кинуть свой .htaccess в директорию css и не городить "трехэтажные Rewrite маты"?
|
Цитата:
|
За счет разбивки инструкций. Всё как в больших проектах, делим на файлы и т.д. в папке css инструкция будет считай одна в основной папке не нужно писать инструкции для css, да ещё так чтобы они не мешали друг другу.
|
на всякий случай повторю задачу: нужно файлы из папки css перенаправлять на css.php, остальные запросы (включая запрос css.php) на index.php. Добавляем в папку css:
RewriteRule ^\w+\.css$ /css.php в результате apache сделает внутренний подзапрос для css.php, который надо будет отличить от реального запроса css.php. Т.е. ничего не поменяется, сэкономим только на ^css/\w+\.css$ -> ^\w+\.css$ |
собственно поэтому я и спросил, почему нужно именно так. И возвращаясь к "как вам подобное решение", лучше изменить задачу и упростить правила
|
Цитата:
Цитата:
Цитата:
Цитата:
Я сделал ЧПУ, а файлы css, js и т.д. обрабатываю через php, сжимаю, убираю из них ненужное, некоторые конечно не трогаю. Цитата:
|
Цитата:
Цитата:
|
Немного сложновато описать задачу:)
На сайте много шаблонов и для систематизации они хранятся в одном месте, а основная задача файла css.php не сжимать и выводить сам файл, а выводить файл текущего шаблона. Такой способ нагружает сервер, но так как большинство данных будет получатся асинхронным методом, и только при смене шаблона все стили и js будут подгружаться снова, я надеюсь больших нагрузок избежать. |
Цитата:
... Я тоже сделал ЧПУ, но не отдаю клиенту статику- css файлы через динамику- php, а надежда, она умирает последней, после обрушения сервера. ;) Из шаблона нельзя вызвать и подгрузить css файл относящийся к этому шаблону? |
Ну я думаю облачный хост будет сложно уронить, да и за безопасностью я жёстко слежу, конечно шансы на дырявость всегда есть, но я стараюсь не оставлять никаких, даже возможных, проблем.
Цитата:
Мне вот интересно, что сейчас более важнее по вашему мнению размер файла или скорость его обработки? В моём случаи общий размер я сократил примерно на 50кб но увеличил время загрузки на 150мс, что лучше? |
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 06:02. |