[help] Mod Rewrite на локалке работает на сервере нет

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем euheni, 28 май 2009.

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

    euheni Постоялец

    Регистр.:
    6 сен 2007
    Сообщения:
    118
    Симпатии:
    21
    Преобразования нужны следующие:
    liveaboards/ в liveaboards.php
    liveaboards/country/ в liveaboard-list.php?id=country
    liveaboards/country/name/ в liveaboard-description.php?id=name

    .htaccess такой

    RewriteEngine on
    RewriteRule liveaboards/*$ liveaboards.php
    RewriteRule liveaboards/([^/]+)/*$ liveaboards-list.php
    RewriteRule liveaboards/([^/]+)/([^/]+)/*$ liveaboards-description.php

    На локалке работает на сервере нет. Не могу найти в чем причина. Mod Rewrite на сервере установлен. Пробовал такой пример RewriteRule ^liveaboards.html$ liveaboards.php для проверки - работает. Помогите, пожалуйста, разобраться.
     
  2. upandhigh

    upandhigh

    Регистр.:
    11 фев 2009
    Сообщения:
    235
    Симпатии:
    89
    скорее всего нужно указать RewriteBase / или какой нужен тебе, поэтому локально работает а ремотно нет.
     
  3. euheni

    euheni Постоялец

    Регистр.:
    6 сен 2007
    Сообщения:
    118
    Симпатии:
    21
    Сделал так:

    RewriteEngine on
    RewriteBase /
    RewriteRule liveaboards/*$ liveaboards.php
    RewriteRule liveaboards/([^/]+)/*$ liveaboards-list.php
    RewriteRule liveaboards/([^/]+)/([^/]+)/*$ liveaboards-description.php

    Все равно 404
     
  4. upandhigh

    upandhigh

    Регистр.:
    11 фев 2009
    Сообщения:
    235
    Симпатии:
    89
    далеко не факт что рутом реврайт бейс должен быть, как раз таки зачастую должен быть путь, включи логи реврайта:
    PHP:
    RewriteLog "/usr/local/var/apache/logs/rewrite.log" # тут файл у себя на винте укажи для логов
    RewriteLogLevel 3
    или
    PHP:
    RewriteLog "/usr/local/var/apache/logs/rewrite.log"  # тут файл у себя на винте укажи для логов
    RewriteLogLevel 5
    не помню когда начинает писать, вобщем попробуй лог левел от 3 до 9 на определенном уровне - в лог при каждом запросе апача начнет писать по какому правилу есть совпадение, и на какой путь при этом совпадение он пытается заменить. и собственно станет видно почему 404, и какой реврайтбейс нада указать
     
  5. euheni

    euheni Постоялец

    Регистр.:
    6 сен 2007
    Сообщения:
    118
    Симпатии:
    21
    Сделал так
    Код:
    RewriteEngine on
    RewriteBase /
    
    RewriteLog "/usr/local/var/apache/logs/rewrite.log"
    RewriteLogLevel 3  
    
    RewriteRule liveaboards/*$ liveaboards.php
    RewriteRule liveaboards/([^/]+)/*$ liveaboards-list.php
    RewriteRule liveaboards/([^/]+)/([^/]+)/*$ liveaboards-description.php
    пробовал такой путь указать

    Код:
    /usr/local/apache/logs/rewrite.log
    RewriteLogLevel менял в таком диапазоне

    выдает Internal Server Error
     
  6. andrnag

    andrnag

    Регистр.:
    26 мар 2008
    Сообщения:
    350
    Симпатии:
    124
    Директиву RewriteLog можно указывать только в основном конфиге сервера httpd.conf в секции вашего виртуального хоста. Т.е. через .htaccess не выйдет, надо теребить хостера, чтобы он добавил вам эту директиву.

    От этого и 500 вылазит.

    Может помочь выставление флагов [L] после твоих директив RewriteRule и не забывай про [QSA] если хочешь использовать Get запросы.

    RewriteBase дольжен быть таким, чтобы относительные пути в RewriteRule при добавлении RewriteBase становились абсолютными от корня веб-пространства.
     
  7. euheni

    euheni Постоялец

    Регистр.:
    6 сен 2007
    Сообщения:
    118
    Симпатии:
    21
    Ребята, спасибо за помощь.

    В итоге заработало следующим образом:

    Код:
    Options All -Indexes
    Options +FollowSymLinks
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteBase /
    
    RewriteRule liveaboards/*$ liveaboards.php
    RewriteRule liveaboards/([^/]+)/*$ liveaboards-list.php
    RewriteRule liveaboards/([^/]+)/([^/]+)/*$ liveaboards-description.php
     
  8. andrnag

    andrnag

    Регистр.:
    26 мар 2008
    Сообщения:
    350
    Симпатии:
    124
    Странно. Приведенный тобой код не полностью соответствует твоей задаче. Получается что ты переводишь все адреса 2го уровня вложенности безусловно на liveaboards-list.php, а третьего на liveaboards-description.php.

    И RewriteBase / должнен идти сразу за RewriteEngine On
    А RewriteCond перед необходимой RewriteRule. Любое количество Cond соответствует одному Rule.
     
Статус темы:
Закрыта.