使用PHP在Apache 2.4上配置RESTful VirtualHost

时间:2015-03-29 15:56:16

标签: php apache rest http mod-rewrite

我正在尝试在我的Apache 2.4服务器(在Ubuntu上)上的VirtualHost上创建RESTful API。我有一个名为dbManager.php的php文件,我使用RewriteRule看起来像api目录。它的工作正常,除了PUT和DELETE命令,它们返回403错误。这是我的conf文件的编辑版本:

<VirtualHost *>
  ServerAdmin onigame@gmail.com
  ServerName servername.com
  ServerAlias *.servername.com

  DirectoryIndex index.html index.php
  DocumentRoot /path/to/local/dir/

  <Directory />
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
    <Limit PUT DELETE>
      Require all granted
    </Limit>
  </Directory>

  # RESTful services provided for the fake "api" directory
  RewriteEngine on
  RewriteRule ^/api/(.*)$ /dbManager.php/$1 [L]

  ServerSignature On

  AddDefaultCharset utf-8
</VirtualHost>

好吧,PUT和DELETE仍然没有工作并且返回403.我也担心我真的不想在目录上的任何地方允许PUT和DELETE,而只是通过虚拟api目录。什么是正确的方法?

1 个答案:

答案 0 :(得分:1)

我设法解决了我的问题,但我并不是真的理解为什么它有效:

<VirtualHost *>
  ServerAdmin onigame@gmail.com
  ServerName servername.com
  ServerAlias *.servername.com

  DirectoryIndex index.html index.php
  DocumentRoot /path/to/local/dir/

  <Directory />
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
  </Directory>

  <Directory /path/to/local/dir/>
    Require all granted
    Satisfy All
  </Directory>

  # RESTful services provided for the fake "api" directory
  RewriteEngine on
  RewriteRule ^/api/(.*)$ /dbManager.php/$1 [L]

  ServerSignature On

  AddDefaultCharset utf-8
</VirtualHost>

最好我能弄明白,获得403表示它的访问被阻止,而不是HTTP请求的类型(这将导致405,而不是403)。访问问题在本地目录中,因此它需要一个特殊的部分。但我真的不明白为什么我放在那里的两条线让事情有效。 Require指令,这是有道理的。但是Satisfy指令(我可以从documentation中得知)应该默认为All

然而,当我删除任何一行时,它都无法正常工作。