友情URL的PHP​​路由帮助

时间:2010-06-19 15:57:31

标签: php mod-rewrite url-rewriting url-routing

我正在建立一个通过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和图像文件。所以除了php生成的HTML之外没有什么工作正常。我遇到了很大麻烦,因为我尝试了mod_rewrite用于所有东西(而不是PHP),我无法让它工作......请参阅:Apaches mod_rewrite VS. PHP routing?

感谢。

1 个答案:

答案 0 :(得分:5)

简单地改进你的mod重写:

<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>