代码之家  ›  专栏  ›  技术社区  ›  Vladislav Rastrusny

在我自己的框架中使用PHP安全路由-how

  •  1
  • Vladislav Rastrusny  · 技术社区  · 14 年前

    框架将在任何地方使用友好的url。但问题是如何在前控制器中解析它们。例如链接 /foo/bar/aaa/bbb 可能意味着“调用控制器的foo操作栏并传递值为bbb的参数aaa。但是,如果有人将框架安装到域根目录的子目录中,那么在确定控制器名称和操作名称之前,应该先剥离目录部分。我在寻找一种安全的方法。

    另外,如果服务器上不支持URL重写,我希望支持回退情况。

    在不同的系统上,定义了不同的$u服务器变量集。例如,在我的本地计算机上,定义了路径信息集、请求URI、请求URL、原始请求URI、脚本名、PHP-SELF-only请求URI、脚本名和PHP-SELF。我在想,我能不能依赖他们。

    4 回复  |  直到 14 年前
        1
  •  1
  •   tftd    13 年前

    我现在也在做同样的研究。但我看到的一切都是如此复杂,我很可能会继续使用mod_rewrite无论如何。毕竟,您最终使用的是相同的东西,而不是使用SEF与PHP或mod_rewrite与apache。不管怎样,我会监视这个话题。。很有趣:)

    编辑:
    这真的取决于你想做什么。为了满足我的需要,我把大部分页面都硬编码了,这样看起来就很安全了。但下面的例子也应该起作用。

    RewriteEngine on
    RewriteRule ^/posts/([A-Za-z0-9_\-]+)/([A-Za-z0-9_\-]+)\.html$ posts.php?$1=$2 [NC]
    

    http://localhost/posts/view/23 
    http://localhost/posts/delete/23
    

    等于:

    http://localhost/posts.php?view=23
    http://localhost/posts.php?delete=23
    

    这真的取决于你到底在做什么:) 上面的例子应该有用,但我还没有测试过。

        2
  •  2
  •   dev-null-dweller    14 年前

    两个解决方案:

    1. 将带有url/installation目录的配置变量添加到应用程序中,并将其从 $_SERVER['REQUEST_URI']
    2. 使apache重写它以获取变量

      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule (.*) index.php?myrequest=$1 [QSA,L]
      
        3
  •  1
  •   netcoder    14 年前

    $base = dirname($_SERVER['PHP_SELF']);
    

    对于第二个问题,如果要检查是否启用了mod_rewrite,可以使用:

    if (in_array('mod_rewrite', apache_get_modules())) {
       // rewrite is enabled
    }
    

    if (in_array('mod_rewrite', apache_get_modules()) &&
        preg_match('/RewriteEngine +On/i', file_get_contents('/path/to/.htaccess'))) {
       // rewrite is enabled and active
    }
    
        4
  •  0
  •   thejh    14 年前

    也许你可以 PHP_SELF 去掉前n个字符,其中n是 SCRIPT_NAME

    编辑:哎呀。。。好像你可以 菲律宾自己 : http://php.about.com/od/learnphp/qt/_SERVER_PHP.htm