Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите с rewrite для .htaccess / 3 сообщений из 3, страница 1 из 1
23.08.2014, 23:38
    #38727363
D.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с rewrite для .htaccess
Приветствую.
Пытаюсь написать универсальный .htaccess для своего мини-движка на PHP, но получается плохо :) Например, не работает если запуск скрипта идет из под-папки.
Текущий код:
RewriteCond %{HTTP_HOST} ^localhost:8081/_ul/$ [NC]
RewriteRule ^(.*)$ http://localhost:8081/_ul/$1 [R=302,L]

RewriteEngine On

# Set current directory as page root.
RewriteBase /_ul

# Remove slash at the end of url
# RewriteRule ^(.*)/$ $1 [R=301,L]

# Makes sure that files that are existing will not get a slash added
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(de-admin|de-themes)
RewriteRule ^([a-zA-Z0-9]+)/$ /$1 [L,QSA]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([a-zA-Z0-9]+)
RewriteRule ^([a-zA-Z0-9]+)$ /_ul/index.php?action=%1 [L,QSA]

#ErrorDocument 403 /_ul/index.php?action=403
#ErrorDocument 404 /_ul/index.php?action=404


Чего пытаюсь достичь:
1. Чтобы все /bla/ приводились к /bla
2. Чтобы de-admin и de-themes не rewrite'ились. Так как в первом случае rewrite не нужен, а во втором случае не феншуй для подключения стилей/скриптов.
3. Если всё оке, переводить на /_ul/index.php?action=содержимое

Чего бы хотелось в дополнение:
1. Сайт-движок может запускаться как в под-папках, так и в корне. Поэтому, хотелось бы только в одном месте установить что-то типа RewriteBase, а в самих регулярках ничего не менять. Искал можно ли в .htaccess использовать переменные (как я понял, в htaccess можно только переменные окружения использовать, а хотелось бы без вмешательства в сервер - не всегда к нему есть доступ), чтобы делать типа:
SetEnv SITEURL http://bla.ru
...
ErrorDocument 404 %{SITEURL}/index.php?action=404
Но ни один из вариантов не заработал которые пробовал, видимо либо делаю не так, либо не дано. Возможно ли вообще?
2. Хотелось бы, чтобы лишь первый action учитывался, а всё что после него превращалось в доп. содержимое без строгой привязки к количеству (чтобы доп. параметры не приходилось вручную вписывать в htaccess).
Например, подали в браузере: /bla/1/2/3/4/5 ---> index.php?action=bla&1&2&3&4&5, или /bla/1/2/3=qwerty/4/5/6/7 --> index.php?action=bla&1&2&3=qwerty&4&5&6&7, при этом чтобы с точки зрения htaccess это например была бы одна универсальная строка, а то была ситуация, когда приходилось такое лепить:
RewriteRule ^(doctors*)/$ index.php?action=doctors [L]
RewriteRule ^(doctors*)/([^/]*)/$ index.php?action=doctors&id=$2 [L]
И следовательно чем больше параметров добавлялось, тем больше добавлялось дубликатов как в примере выше.

Был бы благодарен если бы кто-нибудь помог готовым скриптом, а то наплевался уже с этим mod rewrite :(
...
Рейтинг: 0 / 0
24.08.2014, 10:08
    #38727429
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с rewrite для .htaccess
D.K.,

сделай как в yii :)
там есть продвинутый класс роутинга, а в htaccess просто перенаправление в index.php.
в htaccess можешь просто разбирать строку как action/[всё остальное] (получится типа /myAct/param1/param2 => /index.php?action=myAct&params=param1/param2). По экшену в index.php загружать нужный файл (модуль), а "всё остальное" разбирать регулярками на нужные параметры (с использованием именованных групп для удобства).

В общем такой механизм написать намного проще чем то, что ты пытаешься сделать:)

P.S. В последнее время пришёл к выводу, что модуль должен отвечать за свои внутренние линки и параметры сам... это в разы упрощает перенос модуля с одного сайта на другой (остаётся всего лишь добавить сам модуль в роутинг без заморочек что у него внутри и как это работает). Если у тебя такая же структура, то предлагаю то самое "всё остальное" разбирать не в index.php или htaccess, а в самом файле модуля неким специальным методом (предопределённым для всех модулей через абстрактный унаследованный класс, ну или просто оглавлённым в реализуемом интерфейсе)
...
Рейтинг: 0 / 0
24.08.2014, 10:11
    #38727430
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с rewrite для .htaccess
hotfix.
Форум &params заменил на &params

прошу строку "получится типа /myAct/param1/param2 => /index.php?action=myAct¶ms=param1/param2" понимать как "получится типа /myAct/param1/param2 => /index.php?action=myAct&params=param1/param2"
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите с rewrite для .htaccess / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]