我正在建立一个通过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?
感谢。
答案 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>