Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> mod_rewrite Проблемы, проблемы с ф-й RewriteRule
rapture112  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 42013
На форуме: 1 год, 1 месяц, 16 дней
Карма:




Доброго времени суток. По-моему,на форуме спрашиваю совета впервые, т.к. проблемы и непонятки , которые у меня возникают с mod_rewrite, гугл решить мне не помог.
Так вот:

Через mod_rewrite нужно преобразовывать ссылки вида site.com/generator и site.com/generator.php в ссылки site.com/index.php?act=generator.

Преобразование site.com/generator.php в site.com/index.php&act=generator я сделал:
RewriteRule ([a-z,_]+)\.php$ index.php?act=$1

Теперь,чтобы и site.com/generator преобразовывалось в нужную мне ссылку,я перед первым rewriterule поставил еще один:
RewriteRule ^([^.=]+)$ $1.php

По логике ссылка site.com/generator преобразуется сначала в site.com/generator.php,а потом уже в site.com/index.php?act=generator.
Но меня просто перебрасывало на главную страницу(site.com/). Никак не мог понять, почему ничего не работает. Потом просто поменял местами Rewrite Rule,и файл htacess у меня стал выглядеть так:

AddDefaultCharset UTF-8
RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z,_]+)\.php$ index.php?act=$1
RewriteRule ^([^.=]+)$ $1.php

Все заработало. Теперь site.com/generator кидал меня на site.com/index.php?act=generator( при этом зрительно ссылка оставалась прежней).

Вопрос 1: почему не сработал первый вариант,когда сначала шло ^([^.=]+)$ $1.php ?

Допустим,для первого варианта имеем запрос:
site/generator
На обработку RewriteRule попадает generator(т.к. htaccess находится в папке site/)
Генератор преобразуется в generator.php по первому rewriteRule
Затем по второму generator.php преобразуется в index.php?act=generator
Затем при подстановке Rewrite base имеем site/index.php?act=generator(что нам и нужно)
Повторный цикл не пойдет,т.к. результат rewriterule не будет меняться.
Вроде все должно работать и с первым случаем,что не так?

Так,вот второй момент:
Когда мы переходим по ссылке site.ru/generator?download=5, GET-параметр download теряется. При выводе GET-массива у нас имеется только параметр act=generator. В этом,в общем-то,и заключается второй вопрос: как правильно сформировать ссылку с гет параметром, чтобы при имеющемся RewriteRule все работало нормально.

P.S. Обычно сам разбираюсь со всем, но эта проблема реально достала, уже не первый день с ней парюсь, все облазил. Объясните,пожалуйста,кто шарит,как все работает.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
rapture112  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 42013
На форуме: 1 год, 1 месяц, 16 дней
Карма:




Несколько часов чесания репы привели к тому,что я для каждого GET-параметра( благо,на сайте используются только 4), написал свой RewriteRule. Остался открытым 1й вопрос: почему первый представленый вариант:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.=]+)$ $1.php
RewriteRule ^([a-z,_]+)\.php$ index.php?act=$1

Не работал,а второй(наоборот) - работал?
(Требуется ссылки вида site.com/generator и site.com/generator.php преобразовывать в ссылки вида site.com/index.php?act=generator
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8740
Пользователь №: 26630
На форуме: 5 лет, 9 месяцев, 9 дней
Карма: 591




rapture112
если реврайт работает не так как предполагается, нужно дебажить. В конфиге виртуального хоста пропиши
	<Ifmodule mod_rewrite.c>
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 3
</Ifmodule>

Цитата (rapture112 @ 24.10.2015 - 20:19)
стался открытым 1й вопрос: почему первый представленый вариант:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.=]+)$ $1.php
RewriteRule ^([a-z,_]+)\.php$ index.php?act=$1

Не работал,а второй(наоборот) - работал?

если посмотреть rewrite.log то станет понятно почему user posted image
Свернутый текст
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8b00a0/initial] (3) [perdir /media/d/WebServers/home/test/www/site/] strip per-dir prefix: /media/d/WebServers/home/test/www/site/generate -> generate
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8b00a0/initial] (3) [perdir /media/d/WebServers/home/test/www/site/] applying pattern '^([^.=]+)$' to uri 'generate'
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8b00a0/initial] (2) [perdir /media/d/WebServers/home/test/www/site/] rewrite 'generate' -> 'generate.php'
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8b00a0/initial] (3) [perdir /media/d/WebServers/home/test/www/site/] add per-dir prefix: generate.php -> /media/d/WebServers/home/test/www/site/generate.php
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8b00a0/initial] (2) [perdir /media/d/WebServers/home/test/www/site/] strip document_root prefix: /media/d/WebServers/home/test/www/site/generate.php -> /site/generate.php
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8b00a0/initial] (1) [perdir /media/d/WebServers/home/test/www/site/] internal redirect with /site/generate.php [INTERNAL REDIRECT]
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8a26c8/initial/redir#1] (3) [perdir /media/d/WebServers/home/test/www/site/] strip per-dir prefix: /media/d/WebServers/home/test/www/site/generate.php -> generate.php
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8a26c8/initial/redir#1] (3) [perdir /media/d/WebServers/home/test/www/site/] applying pattern '^([^.=]+)$' to uri 'generate.php'
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8a26c8/initial/redir#1] (3) [perdir /media/d/WebServers/home/test/www/site/] strip per-dir prefix: /media/d/WebServers/home/test/www/site/generate.php -> generate.php
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8a26c8/initial/redir#1] (3) [perdir /media/d/WebServers/home/test/www/site/] applying pattern '^([a-z,_]+)\\.php$' to uri 'generate.php'
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8a26c8/initial/redir#1] (2) [perdir /media/d/WebServers/home/test/www/site/] rewrite 'generate.php' -> 'index.php?act=generate'
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8a26c8/initial/redir#1] (3) split uri=index.php?act=generate -> uri=index.php, args=act=generate
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8a26c8/initial/redir#1] (3) [perdir /media/d/WebServers/home/test/www/site/] add per-dir prefix: index.php -> /media/d/WebServers/home/test/www/site/index.php
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8a26c8/initial/redir#1] (2) [perdir /media/d/WebServers/home/test/www/site/] strip document_root prefix: /media/d/WebServers/home/test/www/site/index.php -> /site/index.php
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc8a26c8/initial/redir#1] (1) [perdir /media/d/WebServers/home/test/www/site/] internal redirect with /site/index.php [INTERNAL REDIRECT]
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc89e240/initial/redir#2] (3) [perdir /media/d/WebServers/home/test/www/site/] strip per-dir prefix: /media/d/WebServers/home/test/www/site/index.php -> index.php
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc89e240/initial/redir#2] (3) [perdir /media/d/WebServers/home/test/www/site/] applying pattern '^([^.=]+)$' to uri 'index.php'
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc89e240/initial/redir#2] (3) [perdir /media/d/WebServers/home/test/www/site/] strip per-dir prefix: /media/d/WebServers/home/test/www/site/index.php -> index.php
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc89e240/initial/redir#2] (3) [perdir /media/d/WebServers/home/test/www/site/] applying pattern '^([a-z,_]+)\\.php$' to uri 'index.php'
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc89e240/initial/redir#2] (2) [perdir /media/d/WebServers/home/test/www/site/] rewrite 'index.php' -> 'index.php?act=index'
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc89e240/initial/redir#2] (3) split uri=index.php?act=index -> uri=index.php, args=act=index
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc89e240/initial/redir#2] (3) [perdir /media/d/WebServers/home/test/www/site/] add per-dir prefix: index.php -> /media/d/WebServers/home/test/www/site/index.php
127.0.0.1 - - [25/Oct/2015:22:02:18 +0300] [test/sid#7f45b6811418][rid#7f45bc89e240/initial/redir#2] (1) [perdir /media/d/WebServers/home/test/www/site/] initial URL equal rewritten URL: /media/d/WebServers/home/test/www/site/index.php [IGNORING REWRITE]


Цитата (rapture112 @ 24.10.2015 - 19:11)
Так,вот второй момент:
Когда мы переходим по ссылке site.ru/generator?download=5, GET-параметр download теряется. При выводе GET-массива у нас имеется только параметр act=generator.

реврайт откидывает query string при обработке, если его нужно сохранить используй флаг QSA
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса