[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: mod_rewrite Проблемы
rapture112
Доброго времени суток. По-моему,на форуме спрашиваю совета впервые, т.к. проблемы и непонятки , которые у меня возникают с 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. Обычно сам разбираюсь со всем, но эта проблема реально достала, уже не первый день с ней парюсь, все облазил. Объясните,пожалуйста,кто шарит,как все работает.
rapture112
Несколько часов чесания репы привели к тому,что я для каждого 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
killer8080
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
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.