【问题标题】:PHP routing for friendly URLs help友好 URL 的 PHP 路由帮助
【发布时间】:2011-03-05 19:17:10
【问题描述】:

我正在建立一个网站,通过 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?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    只需改进你的模组重写:

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

    【讨论】:

    • +1,还添加非控制器驱动的目录,例如“admin”或“downloads”。甚至是整个图像目录。
    • 你能给我管理目录和图片的规则吗??
    • @Jonathan 我已经添加了管理部分,但是图像不需要,因为它们永远不会被这些规则捕获,并且将从 url 中指定的原始路径获取。
    • 最后一个问题,我正在使用 .css 的相对路径和。 js 文件,所以现在我需要将它们更改为完整路径以使其正常工作,但我可能有一个 mod_rewrite 规则,所以没有mather ho manu slashes URL具有相同的路径......也许'RewriteBase'可以这样做?
    猜你喜欢
    • 2010-12-31
    • 2012-10-06
    • 1970-01-01
    • 2011-12-24
    • 2011-11-21
    • 1970-01-01
    • 2011-04-06
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多