За последние 24 часа нас посетили 201844 программиста и 2173 робота. Сейчас ищут 1568 программистов ...

Разрешение на определенные пути (mod_rewrite)

Тема в разделе "Регулярные выражения", создана пользователем rar, 20 мар 2009.

  1. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    В .htaccess протисал:

    RewriteEngine on
    RewriteRule ^.*$ index.php


    Т.е. какой бы адрес в адресной строке не набрать, все время будет перенаправлять на index.php. Это надо мне для того, что бы, контролировать URI через php-скрипт.
    Но дело в том, что на некоторые пути мне надо снять перенаправление на index.php. Т.е. что бы на определенные пути перенаправления не было.
    Например, на пути когда приложение первый раз устанавливается. Вот они:

    http://site/setup/step1.php
    http://site/setup/step2.php
    http://site/setup/step3.php


    Как мне регулярное выражение переписать. Что надо сделать?
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    можно так написать
    Код (Text):
    1. RewriteCond %{REQUEST_FILENAME} !-f
    если запрашивается существующий файл, то именно он будет открыт
     
  3. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Не понял. Сделал вот так RewriteCond %{/setup/step1.php} !-f - все тоже самое.
     
  4. Alost

    Alost Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    335
    Симпатии:
    0
    Адрес:
    Город вокруг невы
    Я ты сделай как тебе написали...один в один
     
  5. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Да бред это...
     
  6. Alost

    Alost Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    335
    Симпатии:
    0
    Адрес:
    Город вокруг невы
    Код (Text):
    1.  
    2. Options +FollowSymLinks +ExecCGI
    3.  
    4. <IfModule mod_rewrite.c>
    5.   RewriteEngine On
    6.  
    7.   # uncomment the following line, if you are having trouble
    8.   # getting no_script_name to work
    9.   #RewriteBase /
    10.  
    11.   # we skip all files with .something
    12.   #RewriteCond %{REQUEST_URI} \..+$
    13.   #RewriteCond %{REQUEST_URI} !\.html$
    14.   #RewriteRule .* - [L]
    15.  
    16.   # we check if the .html version is here (caching)
    17.   RewriteRule ^$ index.html [QSA]
    18.   RewriteRule ^([^.]+)$ $1.html [QSA]
    19.   RewriteCond %{REQUEST_FILENAME} !-f
    20.  
    21.   # no, so we redirect to our front web controller
    22.   RewriteRule ^(.*)$ index.php [QSA,L]
    23. </IfModule>
    Не поверишь но у меня все прекрасно работает) Лишнее вырежи, тебе оно не надо)
     
  7. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Спасибо, действительно работает. Вот как выглядит .htaccess в данный момент:

    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^.*$ index.php


    Но, дело в том, что мне нужен доступ разрешить только к файлам установки. Например к файлам классов с расширениями .inc, .conf и др. надо запретить. У меня же сейчас получается что можно открыть любой существующий файл. Как мне поставить запрет на все остальные файлы помимо тех, которые мне нужны.
     
  8. Alost

    Alost Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    335
    Симпатии:
    0
    Адрес:
    Город вокруг невы
    А ты их спрячь в другую директорию) и на нее запрети доступ.Либо используй точку как первый символ в имени файла(такой файл браузер не отдаст)
     
  9. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Хм. А можно сделать так, что бы только определенные файлы загружались. У меня их всего три. То есть, не на существующие файлы вообще, а только на существующие определенные файлы?
     
  10. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Почитал документацию немного и переписал вот так:

    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !^.*/setup/step[1-3]\.php$
    RewriteRule ^.*$ index.php


    Вроде работает. Как думаете, нет тут подводных камней? И у регулярного выражения нет изъянов?
     
  11. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Самое интересное - css-файл не загружает, без стилей отображаются странички установки. Почему это так происходит?
     
  12. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Потому что твой index.php перехватывает ВСЕ запросы.
     
  13. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Я сейчас вот так переписал:

    RewriteEngine on

    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !^.*/setup/.+$
    RewriteRule ^.*$ index.php


    Вроде, работает нормально.
     
  14. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Options +FollowSymLinks +ExecCGI - а для чего эти директивы нужны?
     
  15. Alost

    Alost Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    335
    Симпатии:
    0
    Адрес:
    Город вокруг невы
    Тебе они не нужны)