Лишняя псевдодиректория в URL и слэш

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем megadude, 16 июл 2010.

Статус темы:
Закрыта.
  1. megadude

    megadude

    Регистр.:
    6 сен 2006
    Сообщения:
    184
    Симпатии:
    65
    Дано:
    Код:
    Options +FollowSymLinks
    
    RewriteEngine On
    RewriteRule ^(.+)$ $1.php [L,QSA]
    
    Ссылка вида localhost/site/index работает правильно и перенаправляется на index.php
    Но localhost/site/index/ (со слэшем в конце) открывается без javascript и css файлов. В index файле к ним ведут относительные УРЛ, напр. <script src="js/script.js" ...>.

    И путь к джаваскриптам, картинкам и цсс после реврайта выглядит так - localhost/site/index/css/styles.css или localhost/site/index/images/logo.jpg, т.е. возникает лишняя псевдодиректория и файлы естественно не подключаются.

    При этом УРЛ должен быть со слэшем в конце, потому как возможны переменные, напр. localhost/site/index/some-text/12

    Коротко: должны работать все варианты:

    • localhost/site/index => localhost/site/index.php
    • localhost/site/index/ => localhost/site/index.php
    • localhost/site/index/some-text/12 => localhost/site/index.php?text=some-text&num=12
    Буду благодарен за любую подсказку.

     
  2. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    попробуем решить в лоб?

    Код:
    Options +FollowSymLinks
    RewriteEngine On
    RewriteRule ^.+/index$ index.php [L,QSA]
    RewriteRule ^.+/index/$ index.php [L,QSA]
    RewriteRule ^.+/index/([^/]+)/([^/]+)$ index.php?text=$1&num=$2 [L,QSA]
    
     
    megadude нравится это.
  3. UDAV

    UDAV

    Регистр.:
    22 июн 2007
    Сообщения:
    781
    Симпатии:
    153
    Код:
    RewriteRule ^(.+)(\/)?$ $1.php [QSA,L]
    RewriteRule ^index/([^/]*)/([^/]*)(\/)?$ index.php?text=$1&num=$2 [QSA,L]
    Пропиши еще тег BASE после HEAD
    Код:
    <head>
    <base href="http://localhost/site/">
     
  4. megadude

    megadude

    Регистр.:
    6 сен 2006
    Сообщения:
    184
    Симпатии:
    65

    С минимальными поправками работает красиво
    Код:
    Options +FollowSymLinks
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    
    RewriteRule ^index$ index.php [L,QSA]
    RewriteRule ^index/$ index.php [L,QSA]
    RewriteRule ^index/([^/]+)/([^/]+)$ index.php?text=$1&num=$2 [L,QSA]
     
Статус темы:
Закрыта.