Alex.Antipin
Новичок
mod_rewrite. автоматическое добавление слеша в конец
Здравствуйте!
Я понимаю, что тему уже заезжаная донельзя, в одном только этом форуме нашел несколько подобных тем, и яндекс помучал изрядно… не помогло, к сожалению (
Картина маслом:
ничего сверхъестественного, есть скрипт pagemaker.php который в зависимости от параметра page генерирует некую страницу.
Естественно, хотелось бы, чтобы все было красиво и выглядело следующим образом:
пользователь набирает http://xxxxx/about/ а мод рерайт преобразует в pagemaker.php?page=about (при этом в адресной строке, разумеется, остается то, то набрал пользователь, т.е. http://xxxxx/about/ )
все это, слава богу работает, благодаря строке
RewriteEngine On
RewriteRule ^([A-Za-z0-9\-_]+)/?$ /pagemaker.php?page=$1
Причем работает, независимо от того, набрал пользователь
http://xxxxx/about/
или
http://xxxxx/about
Однако, тут то и начинаются проблемы…
Дело в том, что скрипт, генерирующий меню, сравнивает некую переменную $uri (в случае с разделом about она равна "/about/") с переменной $GLOBALS["REQUEST_URI"], чтобы выделить активный пункт меню и убрать с него ссылку.
Как вы уже догадываетесь, в случае, если пользователь набирает http://xxxxx/about (без слеша)
то попадает туда куда нужно, однако меню получается не активным, т.к. $uri="/about/", а $GLOBALS["REQUEST_URI"] = "/about".
Можно, конечно, с помошью PHP проверять, есть ли слеш в конце, добавлять его в противном случае и т.д., но хотелось бы все сделать с помощью mod_rewrite, чтобы слешь автоматически добавлялся, например как здесь.
Причем, нечно подобное:
RewriteRule ^test$ /test/ [R]
работает вполне корректно, если папка test существует.
А вот ка скрестить эти две строки — я не знаю.
Чисто теоретически думаю, что сначала нужно произвести операцию на вроде такой:
RewriteRule ^([A-Za-z0-9\-_]+)$ /$1/ [R]
а вслед за ней уже передать все скрипту с помощью
RewriteRule ^([A-Za-z0-9\-_]+)/?$ /pagemaker.php?page=$1
Но на практике так не получается. К сожаленю, я плохо знаком с возможностями mod_rewrite, а время поджимает.
Так что если кто-то знает решение проблемы, огромная просьба — выручайте!
З.Ы. Прошу прощения, что так много текста — хотелось описать проблему как можно более детально.
-~{}~ 20.10.06 18:30:
Мое предположение оказалось верным, только я не знал о флаге N.
Вообщем, если у кого-то подобная проблема возникнет, решается она следующим образом:
RewriteRule ^([A-Za-z0-9\-_]+)$ /$1/ [R,N]
RewriteRule ^([A-Za-z0-9\-_]+)/?$ /pagemaker.php?page=$1
Все же, если такой вариант в чем-то некорректен, просьба меня поправить!
Здравствуйте!
Я понимаю, что тему уже заезжаная донельзя, в одном только этом форуме нашел несколько подобных тем, и яндекс помучал изрядно… не помогло, к сожалению (
Картина маслом:
ничего сверхъестественного, есть скрипт pagemaker.php который в зависимости от параметра page генерирует некую страницу.
Естественно, хотелось бы, чтобы все было красиво и выглядело следующим образом:
пользователь набирает http://xxxxx/about/ а мод рерайт преобразует в pagemaker.php?page=about (при этом в адресной строке, разумеется, остается то, то набрал пользователь, т.е. http://xxxxx/about/ )
все это, слава богу работает, благодаря строке
RewriteEngine On
RewriteRule ^([A-Za-z0-9\-_]+)/?$ /pagemaker.php?page=$1
Причем работает, независимо от того, набрал пользователь
http://xxxxx/about/
или
http://xxxxx/about
Однако, тут то и начинаются проблемы…
Дело в том, что скрипт, генерирующий меню, сравнивает некую переменную $uri (в случае с разделом about она равна "/about/") с переменной $GLOBALS["REQUEST_URI"], чтобы выделить активный пункт меню и убрать с него ссылку.
Как вы уже догадываетесь, в случае, если пользователь набирает http://xxxxx/about (без слеша)
то попадает туда куда нужно, однако меню получается не активным, т.к. $uri="/about/", а $GLOBALS["REQUEST_URI"] = "/about".
Можно, конечно, с помошью PHP проверять, есть ли слеш в конце, добавлять его в противном случае и т.д., но хотелось бы все сделать с помощью mod_rewrite, чтобы слешь автоматически добавлялся, например как здесь.
Причем, нечно подобное:
RewriteRule ^test$ /test/ [R]
работает вполне корректно, если папка test существует.
А вот ка скрестить эти две строки — я не знаю.
Чисто теоретически думаю, что сначала нужно произвести операцию на вроде такой:
RewriteRule ^([A-Za-z0-9\-_]+)$ /$1/ [R]
а вслед за ней уже передать все скрипту с помощью
RewriteRule ^([A-Za-z0-9\-_]+)/?$ /pagemaker.php?page=$1
Но на практике так не получается. К сожаленю, я плохо знаком с возможностями mod_rewrite, а время поджимает.
Так что если кто-то знает решение проблемы, огромная просьба — выручайте!
З.Ы. Прошу прощения, что так много текста — хотелось описать проблему как можно более детально.
-~{}~ 20.10.06 18:30:
Мое предположение оказалось верным, только я не знал о флаге N.
Вообщем, если у кого-то подобная проблема возникнет, решается она следующим образом:
RewriteRule ^([A-Za-z0-9\-_]+)$ /$1/ [R,N]
RewriteRule ^([A-Za-z0-9\-_]+)/?$ /pagemaker.php?page=$1
Все же, если такой вариант в чем-то некорректен, просьба меня поправить!