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

Статус
В этой теме нельзя размещать новые ответы.

euheni

Постоялец
Регистрация
6 Сен 2007
Сообщения
118
Реакции
26
Преобразования нужны следующие:
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 для проверки - работает. Помогите, пожалуйста, разобраться.
 
скорее всего нужно указать RewriteBase / или какой нужен тебе, поэтому локально работает а ремотно нет.
 
Сделал так:

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

Все равно 404
 
Сделал так:
RewriteEngine on
RewriteBase /
RewriteRule liveaboards/*$ liveaboards.php
RewriteRule liveaboards/([^/]+)/*$ liveaboards-list.php
RewriteRule liveaboards/([^/]+)/([^/]+)/*$ liveaboards-description.php
Все равно 404
далеко не факт что рутом реврайт бейс должен быть, как раз таки зачастую должен быть путь, включи логи реврайта:
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, и какой реврайтбейс нада указать
 
Сделал так
Код:
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
 
Директиву RewriteLog можно указывать только в основном конфиге сервера httpd.conf в секции вашего виртуального хоста. Т.е. через .htaccess не выйдет, надо теребить хостера, чтобы он добавил вам эту директиву.

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

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

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

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

Код:
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
 
Странно. Приведенный тобой код не полностью соответствует твоей задаче. Получается что ты переводишь все адреса 2го уровня вложенности безусловно на liveaboards-list.php, а третьего на liveaboards-description.php.

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