Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите с RewriteRule
Форумы портала PHP.SU » » Вопросы новичков » Помогите с RewriteRule

Страниц (1): [1]
 

1. Anguis - 19 Мая, 2013 - 09:38:46 - перейти к сообщению
htacess :
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. RewriteEngine on
  3. RewriteBase /
  4.  
  5. RewriteCond %{HTTP_HOST} ^site.org
  6. RewriteRule (.*) http://www.site.org/$1 [R=301,L]
  7.  
  8. RewriteCond %{REQUEST_FILENAME} !-f
  9. RewriteRule ^(.*)$ /index.php
  10.  


Нужно добавить правило, что-бы любую ссылку в которой содержится request направило на /request
например site.org/user/1/request -> site.org/request site.org/user/1?request -> site.org/request

Вроде тривиальная задача, но бьюсь уже второй день. Большинство манипуляций вроде RewriteRule ^.*request.*$ /request либо ни как не работают, либо приводят к зацикливанию с internal server error
2. Anguis - 19 Мая, 2013 - 18:49:24 - перейти к сообщению
ну неужели ни кто не в курсе?
3. KingStar - 19 Мая, 2013 - 19:02:24 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteRule ^(.*)request /request [L]
4. Anguis - 19 Мая, 2013 - 19:11:55 - перейти к сообщению
KingStar, internal Server Error при запросе /request Зацикливается. Если поставить RewriteRule ^request - [L], то тогда все срабатывает, кроме RewriteRule ^(.*)$ /index.php
А это тоже важно. request должен обрабатывать index.php, как и любой другой запрос..
5. KingStar - 19 Мая, 2013 - 19:30:15 - перейти к сообщению
Anguis пишет:
Если поставить RewriteRule ^request - [L], то тогда все срабатывает, кроме RewriteRule ^(.*)$ /index.php

интересно, как ты тогда хочешь чтобы обработал request и одновременно RewriteRule ^(.*)$ /index.php
(Добавление)
сделай редирект тогда на /request
6. Anguis - 19 Мая, 2013 - 19:40:15 - перейти к сообщению
примерно как-то так
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. RewriteRule ^request /index.php [L]
  3. RewriteRule ^(.*)request /request
  4.  
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteRule ^(.*)$ /index.php
  7.  


пурга какая-то получается Хм
(Добавление)
поясню для чего нужно. Сайт на комерческой cms с ЧПУ. Исходный htacess в первом посте. Установили дополнительный модуль, реализующий личный блог каждого зарегистрированного пользователя. Все урл на сайте в стиле site.org/path/to/page, урлы пользователей site.org/users/userid, а урлы блогов в новом модуле site.org/blog?id=userid а мне надо сделать что бы были /users/userid/blog
Может есть еще пути решения? Редирект не канает. Пользователь не должен видеть в браузере урлов типа site.org/blog?id=userid
7. Anguis - 20 Мая, 2013 - 07:59:17 - перейти к сообщению
up
Any ideas?
8. PHPLamer - 20 Мая, 2013 - 08:39:44 - перейти к сообщению
На мой взгляд тут можно поступить двумя способами:
1. Либо изменить код той части движка которая осуществляет навигацию.
2. Либо добавить соответствующее правило

CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteCond   %{REQUEST_FILENAME}       !-d
  2. RewriteCond   %{REQUEST_FILENAME}       !-f
  3. RewriteRule   ^(.*) site.org/blog?id=%{QUERY_STRING}


Немного затрудняюсь здесь
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteCond   %{REQUEST_FILENAME}       !-d
  2. RewriteCond   %{REQUEST_FILENAME}       !-f

однако можно какую-то такую конструкцию навернуть
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteCond    site.org/users/%{REQUEST_FILENAME}       !-d
  2. RewriteCond    site.org/users/%{REQUEST_FILENAME}       !-f
9. Anguis - 20 Мая, 2013 - 09:04:52 - перейти к сообщению
Нихт.
Загвоздка тут в том, что правила типа
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteRule   ^(.*) site.org/blog?id=%{QUERY_STRING}

Отменяют правило
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteRule ^(.*)$ /index.php

И запрос site.org/blog?id=userid уже не обрабатывается index.php
Код править не могу - cms комерческая, да и не хочу.
Пока единственный костыль который вижу, сделать отдельный обработчик для запроса
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. RewriteRule   ^(.*)blog request.php
  3.  

request.php
PHP:
скопировать код в буфер обмена
  1.  
  2. readfile('site.org/blog?id='.preg_replace('~.*/(.*)/?$~U','\1',$_SERVER['REQUEST_URI']));
  3.  

Но он мне очень очень не нравится

 

Powered by ExBB FM 1.0 RC1