Announcement

Collapse
No announcement yet.

Не получается осилить простенькое правило по Mod Rewrite

Collapse

Forum Topic List

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Не получается осилить простенькое правило по Mod Rewrite

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

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    Насколько я понимаю регулярные выражения, то третье условие должно выглядеть как:

    RewriteCond %{REQUEST_FILENAME} ^!.*vlogenaya_papka.*

    RewriteRule ^(.*) http://site.com/ru/$1 [R,L]

    Но выдает ошибку, как правильно написать третье условие?

  • #2
    Re: Не получается осилить простенькое правило по Mod Rewrite

    для этого вам достаточно добавить в конфигурацию apache инструкцию, которая запрещает переность свойства .htaccess лежащего в корне, на вложенные директории:

    Code:
    AllowOverride None
    или вы можете просто запретить rewriting в нужной вам директории:

    Code:
    RewriteEngine Off
    кроме того, если вы имеете доступ к редактированию конфигурации вашего apache, старайтесь избегать использования файла .htaccess вообще, а все нужные настройки делайте через редактирование httpd.conf. Если у вас не очень быстрый сервер, то отказ от использования .htaccess позволит вам в разы увеличить скорость работы apache...

    а вот и еще один вариант, - явно указать, для какой директории применять правила:

    Code:
    RewriteBase /
    Apache module mod_rewrite

    Comment


    • #3
      Ответ: Не получается осилить простенькое правило по Mod Rewrite

      Да так гораздо проще чем кучу регулярных писать.
      Спасибо получилось и за совет насчет httpd.conf

      Comment


      • #4
        Ответ: Не получается осилить простенькое правило по Mod Rewrite

        Я может не вникнул в ситуацию, но AllowOverride запрещает настройкам в .htaccess изменять настройки, указанные в httpd.conf. При чем тут вложенные папки?

        Comment


        • #5
          Re: Не получается осилить простенькое правило по Mod Rewrite

          Скажем так, желательно глобально отключить обработку .htaccess файлов для всего сервера, и включать ее ТОЛЬКО там, где нужно, при помощи сексции <Directory>, внутри конфигурации того или иного Virtualhost

          При этом мы убиваем двух зайцев:
          • значительно снижаем нагрузку на сервер, запрещая apache рыскать по всем вложенным директориям в поисках .htaccess, ответственного за ту или иную директорию.
          • получаем возможность точной настройки конфигурационных директив, применяемых для той или иной директрии, зная при этом на 100% что нет более никаких директив to override или to affect то, что мы хотим от apache в той или иной конкретной директории.


          Кроме того, речь о том, что желательно вообще отказаться от использования .htaccess, а использовать все возможные директивы внутри главного httpd.conf для каждого конкретного вируального хоста.

          Применительно к ситуации, описанной masterlelik, я предлагал включить AllowOverride None для всего сервера, включить AllowOverride All и настроить rewrite rules только для нужной директории.

          Еще более конкретно:

          у нас есть два .htaccess, один в DocumentRoot, а второй на один уровень ниже:
          Code:
          /home/user/public_html/.htaccess
          /home/user/.htaccess
          Если в httpd.conf, внутри нужного нам VirtualHost написать следующее:
          Code:
          <VirtualHost ххх.ххх.ххх.ххх>
          .........
          DocumentRoot /home/user/public_html
          <Directory /home/user/public_html>
          AllowOverride None
          </Directory>
          .........
          </VirtualHost>
          то будет обрабатываться ТОЛЬКО /home/user/.htaccess

          если в описанной выше конфигурации заменть AllowOverride None на AllowOverride All, то будут обрабатываться ОБА .htaccess файла, причем тот, что расположен выше, будет ГЛАВНЫМ, и из двух одинаковых директив будет выполнена та, что в /home/user/public_html/.htaccess

          P.S. при этом я совершенно согласен с тобой, что фраза "для этого вам достаточно добавить в конфигурацию apache инструкцию, которая запрещает переность свойства .htaccess лежащего в корне, на вложенные директории" ничего общего с истинным назначением AllowOverride не имеет.

          на самом деле:

          1. AllowOverride с переключателем None заставляет сервер "забыть" о существовании .htaccess

          2. AllowOverride с переключателем All говорит серверу обрабатывать любую директиву, разрешенную в .htaccess

          ОДНАКО: использование контейнера <Directory> в httpd.conf позволяет "отменить" пункт 1 для конкретной директории.

          Comment

          Working...
          X