【问题标题】:PUT request 403 ForbiddenPUT 请求 403 禁止
【发布时间】:2014-10-31 00:52:37
【问题描述】:

使用 laravel 开发 API。

在 PUT 请求上获得 403 Forbidden。

在远程服务器上工作,但不在本地。对本地服务器使用 MAMP。

这是我的虚拟主机,我看不到任何东西。

<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot "/Users/dg/Documents/Websites/domain.com/public_html/dev/public_html" ServerName domain.local ServerAlias www.domain.local <Directory /> Options Indexes FollowSymLinks AllowOverride All </Directory> ErrorLog "/Users/dg/Documents/Websites/domain.com/public_html/dev/error_log" CustomLog "/Users/dg/Documents/Websites/domain.com/public_html/dev/access_log" common </VirtualHost>

我已经查看了关于 SO 的其他类似问题,但还没有解决方案。

【问题讨论】:

  • 第一个问题是这个403是从哪里来的,是webserver还是laravel app拒绝了请求?看看你的 apache 错误/访问日志和你的 laravel 日志(app/storage/logs)。

标签: laravel-4 apache2 mamp


【解决方案1】:

在这里找到解决方案:https://serverfault.com/questions/275512/put-request-results-in-403-forbidden-need-apache-to-allow-put-requests

在文档根目录的 .htaccess 中添加了以下内容:

<Limit GET POST PUT DELETE HEAD OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST PUT DELETE HEAD OPTIONS> Order deny,allow Deny from all </LimitExcept>

【讨论】:

    【解决方案2】:

    根据@drack 的回答,我使用以下代码编辑我的 .htaccess:

        <Limit GET POST PUT OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST PUT OPTIONS>
            Require all denied
        </LimitExcept>
    

    我完整的 .htaccess 文件是:

    Header add Access-Control-Allow-Origin: "*"
    Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
    Header add Access-Control-Allow-Headers: "Content-Type"
    <Limit GET POST PUT OPTIONS>
        Require all granted
    </Limit>
    <LimitExcept GET POST PUT OPTIONS>
        Require all denied
    </LimitExcept>
    # BEGIN WordPress
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
    
    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    # END WordPress
    

    并且 403 错误在 put 请求中消失了。

    【讨论】:

      【解决方案3】:

      在我的 vhosts 文件中我放了:

      RewriteCond %{REQUEST_METHOD} !^(HEAD|GET|POST|PUT)$ [NC]
      

      这对我来说是可行的。我尝试了所有其他解决方案,但没有任何效果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-24
        • 2012-02-03
        • 1970-01-01
        • 1970-01-01
        • 2016-08-17
        • 2020-08-18
        相关资源
        最近更新 更多