【问题标题】:With Amazon EC2 can I still use Rest.inc.php (REST API) or is there a different approach?使用 Amazon EC2,我仍然可以使用 Rest.inc.php (REST API) 还是有其他方法?
【发布时间】:2017-11-04 11:06:18
【问题描述】:

我正在尝试将项目的 REST API 迁移到 Amazon AWS。我安装了 PHP 7.0 并在 EC2 实例上工作。但是,我似乎根本无法让我的 API 路由正常工作。原始版本使用 Rest.inc.php 和 .htaccess 文件。我已经在其他几台服务器上进行了设置,没有任何问题,但无法在 Amazon AWS 下运行。

我想知道问题出在哪里。我只是在 API 调用上收到一个未找到的错误。这可能与安全/签名问题有关,还是我应该在 AWS 上使用完全不同的方法?

我使用的代码与您搜索的任何地方似乎都会弹出的示例非常相似。

<?php

    require_once("Rest.inc.php");

    class API extends REST {

        public $data = "";

        const DB_USER       = "username";
        const DB_PASSWORD   = "password";

        private $db = NULL;

        public function __construct(){
            parent::__construct();
            $this->dbConnect();
        }

        private function dbConnect(){
            try {
                $this->db = new PDO("mysql:host=myAWShost;dbname=database", self::DB_USER, self::DB_PASSWORD);
                $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }
            catch(PDOException $e) {
                echo "Connection failed: " . $e->getMessage();
            }
        }

        public function processApi(){

            $func = strtolower(trim(str_replace("/","",$_REQUEST['rquest'])));

            if((int)method_exists($this,$func) > 0) {
                $this->$func();
            } else {
                $this->response('',404);
            }

        }

        private function activity(){
            ...
        }

        private function appointment(){
            ...
        }

        private function client(){
            ...
        }

        private function facility(){
            ...
        }

        private function person(){  
            ...
        }

        private function personLocation(){
            ...         
        }
    }

    // Initiiate Library

    $api = new API;
    $api->processApi();

?>

.htaccess 文件:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteRule ^(.*)$ api.php?rquest=$1 [QSA,NC,L]

    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(.*)$ api.php [QSA,NC,L]

    RewriteCond %{REQUEST_FILENAME} -s
    RewriteRule ^(.*)$ api.php [QSA,NC,L]   
</IfModule>

【问题讨论】:

    标签: php .htaccess rest amazon-web-services amazon-ec2


    【解决方案1】:

    要让 Apache 读取 .htaccess 文件,您需要确保在 Apache 配置文件中设置了 AllowOverride All,然后使用 sudo service httpd restart 重新启动 apache。

    例子:

    <Directory "/var/www/html">
    AllowOverride None
    </Directory>
    

    变成:

    <Directory "/var/www/html">
    AllowOverride All
    </Directory>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2019-11-06
      • 2011-01-29
      • 2023-01-27
      • 2014-09-17
      相关资源
      最近更新 更多