Обработка ссылки RegExp в .htaccess ?

sysger
На сайте с 28.03.2011
Offline
69
819

Приветствую, уважаемые форумчане!

Мне нужно обработать ссылку вида http://site.com/путь/страница.html

средствами .htaccess для использования в скрипте таким образом, чтобы у меня были 3 переменные путь, страница, расширение и желательно уместить правило в одну строку.

Мучаюсь уже часов 6, но не могу достичь нужного результата!

IL
На сайте с 20.04.2007
Offline
435
#1

RewriteEngine on

RewriteRule (.*)/([^/]+)\.(\w+) index.php?path=$1&page=$2&ext=$3 [L]

http://site.ru/ban/bamn/banhdn/hndfh.htmn

Array ( [path] => ban/bamn/banhdn [page] => hndfh [ext] => htmn )

А зачем разбирать в .htaccess, если в php $_SERVER['REQUEST_URI'] есть?

p.s. Если не будет расширения - правило не сработает.. если не будет пути - тоже.. ;)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
sysger
На сайте с 28.03.2011
Offline
69
#2

Спасибо, за пример, но нечто похожее я уже делал.

В том-то вся загвоздка, что мне нужна определенная вложенность путей.

Я стремился к тому чтобы работало правило для ссылок:

http://site.com/path/page.ext

http://site.com/page.ext

и больше никак.

Хотя видимо это не так просто реализовать, как я считал прежде... :(

IL
На сайте с 20.04.2007
Offline
435
#3
sysger:
В том-то вся загвоздка, что мне нужна определенная вложенность путей.
Я стремился к тому чтобы работало правило для ссылок:
http://site.com/path/page.ext
http://site.com/page.ext
и больше никак.

path может содержать слэши? Или нет? Постом выше - вариант для случая, когда может.

Для

http://site.com/page.ext

правило такое:

RewriteRule ^([^/]+)\.(\w+)$ index.php?page=$1&ext=$2 [L]

path не устанавливаем, т.к. его нет.

Можно объединить в одно правило, если определиться с допустимыми символами (видимо, вложенность = количество слэшей)

sysger
На сайте с 28.03.2011
Offline
69
#4
ivan-lev:

Можно объединить в одно правило, если определиться с допустимыми символами (видимо, вложенность = количество слэшей)

Да, видимо придется объединить 2 правила в 1...

Количество слешей может быть до 1.

http://site.com/path/page.ext

http://site.com/page.ext

Насколько я понимаю правила в .htaccess нужно разделять знаком | (или)

siv1987
На сайте с 02.04.2009
Offline
427
#5
Количество слешей может быть до 1.
http://site.com/path/page.ext
http://site.com/page.ext

RewriteRule ^([^/]+/)?([^/]+)\.(\w+)$ index.php?path=$1page=$2&ext=$3 [L]

sysger
На сайте с 28.03.2011
Offline
69
#6
siv1987:
RewriteRule ^([^/]+/)?([^/]+)\.(\w+)$ index.php?path=$1page=$2&ext=$3 [L]

То, что нужно!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий