Проблемы с .htaccess, виртуальные поддомены и Codeigniter

в основном моя проблема в этом. Я настроил систему, которая принимает поддомены с подстановочными знаками и переписывает их в одну установку CodeIgniter. Существует контроллер, называемый диспетчером, который принимает требуемые аргументы, а также передает поддомен, используемый в URL-адресе.

Моя проблема заключается в следующем: мне нужно создать RewriteRules, которые соответствуют структуре URL-адресов CodeIgniter. В настоящее время у меня есть это:

RewriteEngine On

# Extract the subdomain part of domain.com
RewriteCond %{HTTP_HOST} ^([^\.]+)\.ev-apps\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# Check that the subdomain part is not www and ftp and mail
RewriteCond %1 !^(www|ftp|mail)$ [NC]

# Redirect all requests to a php script passing as argument the subdomain
RewriteRule ^/(.*)/(.*)$ /dispatcher/run_app/$1/$2/%1 [L,QSA] # First is app name, then site, then action
RewriteRule ^/(.*)/(.*)/(.*)$ /dispatcher/run_app/$1/$2/$3/%1 [L,QSA] # First is app name, then site, then action, then any passed data.

Он отлично работает для URL-адресов следующего формата: «http://example.ev-apps.com/app/method/1", но не для "http://example.ev-apps.com/app/method". Кажется, что приоритет неверен, но в идеале мне нужно решение, которое будет работать для любого количества сегментов, например: "http://example.ev-apps.com/app/method/1/2/3/4/5/6/7/8/9 и т. д.

Любая помощь будет принята с благодарностью.


person Tom Hallam    schedule 17.08.2010    source источник


Ответы (1)


Я решил эту проблему, используя следующую директиву:

RewriteRule ^(.*)$ /dispatcher/run_app/%1/$1 [L,QSA] 

А затем с помощью следующего кода в моем действии диспетчера:

$args = func_get_args();

$site_subdomain = $args[0];
$app_name = $args[1];
$action = $args[2];
$input = (isset($args[3]) ? $args[3] : '');

Спасибо за чтение, если вы это сделали!

person Tom Hallam    schedule 17.08.2010