Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有框架的情况下使用PHP快速建立RESTful站点?_Php_Rest_Redirect - Fatal编程技术网

如何在没有框架的情况下使用PHP快速建立RESTful站点?

如何在没有框架的情况下使用PHP快速建立RESTful站点?,php,rest,redirect,Php,Rest,Redirect,我想在不学习PHP框架的情况下使用PHP快速建立一个RESTful站点。我想在Apache中使用一个.htaccess-文件,或者使用Nginx使用一个规则,因此我可以在不更改代码的情况下更改web服务器 因此,我希望将所有请求定向到一个PHP文件,该文件负责RESTful处理并调用正确的PHP文件 例如: 用户请求 服务器将所有请求发送到rest.php rest.php调用test.php(可能带有查询字符串) 如果可以做到这一点,是否有一个像myrest.PHP一样工作的免费PHP脚本?或

我想在不学习PHP框架的情况下使用PHP快速建立一个RESTful站点。我想在Apache中使用一个
.htaccess
-文件,或者使用Nginx使用一个规则,因此我可以在不更改代码的情况下更改web服务器

因此,我希望将所有请求定向到一个PHP文件,该文件负责RESTful处理并调用正确的PHP文件

例如:

  • 用户请求
  • 服务器将所有请求发送到
    rest.php
  • rest.php
    调用
    test.php
    (可能带有查询字符串)

  • 如果可以做到这一点,是否有一个像my
    rest.PHP
    一样工作的免费PHP脚本?或者如何执行此PHP脚本?

    是的,将
    404重定向到名为
    rest.PHP
    的页面。使用
    $url=$\u服务器['REQUEST\u URI']
    检查url。在
    rest.php
    中,您可以重定向到任何您想要的地方

    这只需要一条规则(
    .htaccess
    文件中的
    404


    您必须小心,确保如果请求的页面(例如mysite.com/test1没有test1.php)出现404错误,您不会陷入循环。

    使用Apache Mod Rewrite:

    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^test$ rest.php [nc]
    

    从操作方式上稍作修改。这会将所有内容重定向到rest.php,并将原始请求的URL放入$_GET['q'],以便您对其采取适当的操作。您可以将其放在apache配置或.htaccess中。确保mod_rewrite已启用

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !=/favicon.ico
    RewriteRule ^(.*)$ rest.php?q=$1 [L,QSA]
    
    如果您想要做的只是包含请求的文件,那么您可以执行如下操作

    <?php
      if (!empty($_GET['q'])) {
        $source = $_GET['q'] . '.php';
        if (is_file($source)) {
          include $source;
        } else {
          echo "Source missing.";
        }
      }
    ?>
    
    
    
    然而,你真的不想那么做;例如,如果有人请求'/../../../../etc/passwd',您可能最终会提供一些您不想提供的内容

    我想像这样的东西更安全

     <?php
      if (!empty($_GET['q'])) {
        $request = $_GET['q'];
        switch ($request) {
          case 'test1':
            include 'test1.php';
            break;
          default:
            echo 'Unrecognised request.';
            break;
        }
      }
      ?>
    
    
    
    但我希望我的所有页面都使用它。所以我想让mysite.com/test1进入我的test1.php文件。我想你不太明白。如果用户请求的文件不存在,它将陷入重定向循环。这就是为什么在重定向之前应该检查文件是否存在的原因。