Проблема c RewriteRule в .htaccess

Prometheus

Новичок
Проблема c RewriteRule в .htaccess

Добрый день!

Прошу помочь в решении проблемы - не работает RewriteRule

RewriteRule ^news$ index.php?typecnt=news
RewriteRule ^news([0-9]{1,4})_([0-9]{1,4})$ index.php?typecnt=news&idcontent=$2&idmn=$1
RewriteRule ^news([0-9]{1,4})_([0-9]{1,4})~([0-9]{1,4})$ index.php?typecnt=news&idcontent=$2&idmn=$1&lst=$3

т.е. работают пути вида /news10_101, а /news - не работает.
 

PiratusXP

Новичок
Просто поменяй местами строчки, мне помогала
RewriteRule ^news$ index.php?typecnt=news
в самом конце
 

white phoenix

Новичок
Prometheus
> /news - не работает.
А у меня работает, что у тебя происходит?
Для проверки запиши в index.php:
PHP:
<pre><?php var_dump($_REQUEST); ?></pre>
PiratusXP
Не говори если не знаешь.
 

Prometheus

Новичок
появились следующие ошибки
----------------
array(0) {
}


Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/www/index.php:1) in /home/www/index.php on line 4

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/index.php:1) in /home/www/index.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /home/www/index.php:1) in /home/www/index.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at /home/www/index.php:1) in /home/www/index.php on line 8

Warning: Cannot modify header information - headers already sent by (output started at /home/www/index.php:1) in /home/www/index.php on line 9
-----------------

Код в index.php
-----------------
PHP:
<?php
      ob_start("ob_gzhandler");
      session_start();
      require "config.php";
      require "phpfunction.php";
      header("Content-type: text/html; charset=windows-1251");
      header("Cache-Control: no-store, no-cache, must-revalidate");
      header("Cache-Control: post-check=0, pre-check=0", false);
      $lng="rus";
      if(!isset($lng)){$lng="eng";}
      session_register( "lng" );
      if(isset($lang))
      {
         if($lang=="eng"){$lng=$lang;}
         elseif($lang=="rus"){$lng=$lang;}
         else{$lng="rus";}
      }
---------------

Извините, что загружаю Вас своим кодом...
 

white phoenix

Новичок
Prometheus
Тот код нужно отдельно запускать, для проверки работы правил mod_rewrite.
> /news - не работает.
Что именно происходит?
 

SaNeK

Новичок
RewriteRule ^news[/]{0,}$ /index.php?typecnt=news
Array
(
[typecnt] => news
)
RewriteRule ^news([0-9]{1,4})_([0-9]{1,4})$ /index.php?typecnt=news&idcontent=$2&idmn=$1
Array
(
[typecnt] => news
[idcontent] => 12
[idmn] => 12
)
RewriteRule ^news([0-9]{1,4})_([0-9]{1,4})~([0-9]{1,4})$ /index.php?typecnt=news&idcontent=$2&idmn=$1&lst=$3
Array
(
[typecnt] => news
[idcontent] => 12
[idmn] => 12
[lst] => 12
)
 

Prometheus

Новичок
Спасибо за пример, но не работает...

/news не работает.

-~{}~ 24.01.06 10:39:

Как корректно использовать <pre><?php var_dump($_REQUEST); ?></pre> для получения подобных значений Array?

Спасибо.
 

SaNeK

Новичок
как это не работает?
Так, давай тогда вот что выясним: ты обращаешься к папке news как http://localhost/news? Судя по всему, там стоит что-то вроде http://localhost/чтотонепонятное/news.

Если это так, то тебе надо в своем файле .htaccess изменить путь к index.php
RewriteRule ^news[/]{0,}$ /чтотонепонятное/index.php?typecnt=news

Хотя может я и не прав: однако факт - у меня работают все три правила
 

Prometheus

Новичок
Посмотрел в логах - там следующая ошибка
Negotiation: discovered file(s) matching request: /home/www/news (None could be negotiated).

Никаких промежуточных папок нет... есть index.php, который через require подключает файл news.php из внутренней папки.
 

Prometheus

Новичок
2.0.55.

С ошибкой разобрались - был конфликт с другим модулем Apache со сходными с news конфигурационными файлами.

Все работает. Спасибо за Вашу оперативность и участие.
 
Сверху