Показать сообщение отдельно
  #5 (permalink)  
Старый 02.11.2011, 10:23
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Skipp
Остался самый главный вопрос, как вам подобное решение, говнокод или нет и что посоветуете изменить?
а ты объясни, почему именно так надо сделать? Почему css.php перенаправляется в index.php, а *.css в css.php?

а вообще, так можно еще сделать (помимо копирования переменных в подзапрос с префиксом 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-файлов, для этого делается подзапрос.
Ответить с цитированием