Помощь PHP-маршрутизации для дружественных URL - PullRequest
5 голосов
/ 19 июня 2010

Я создаю веб-сайт, на котором выполняется весь код через index.php.

Например index.php?controller=something&id=01234.

Я хочу использовать PHP для создания дружественных URL-адресов, поэтому я делаю это:

$request = str_replace('/root/', '', $_SERVER['REQUEST_URI']);
$params = explode('/', $request);

$controllers = array('first_c', 'second_c', 'third_c');

if (in_array($params[0], $controllers)) {
   include($params[0]); // just to give an example
}

Затем с правилом mod_rewrite RewriteRule ^.*$ ./index.php Я перенаправляю все в index.php.

У меня есть некоторые проблемы с этим: потому что все отправлено в index.php, включая .css, .js и файлы изображений. Таким образом, кроме HTML, генерируемого php, ничего не работает правильно. У меня большие проблемы с этим, потому что я попробовал mod_rewrite для всего (вместо PHP) и не могу заставить его работать ... пожалуйста, смотрите: Apaches mod_rewrite VS. PHP маршрутизация?

Спасибо.

1 Ответ

5 голосов
/ 19 июня 2010

Просто улучшите ваш мод переписать:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>

Особенно добавьте строку RewriteCond %{REQUEST_FILENAME} !-f

И если вы хотите больше разделов:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule admin/.*$ admin.php [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>
...