在Apache服务器上启用ssl后,AJAX POST请求出现错误301

在Apache服务器上启用ssl后,AJAX POST请求出现错误301,ajax,laravel,ssl,cors,Ajax,Laravel,Ssl,Cors,我正在构建一个简单的基于Laravel的RESTAPI,它通过基于apache的Ubuntu服务器提供服务,Angular 6 web应用程序通过其HttpClient模块使用该服务器 它在我的本地主机上正常工作,直到我将它上传到Firebase主机,Firebase主机支持https。因此,我必须在我的服务器上实现一个商业SSL证书,通过邮递员处理POST请求或通过Google Chrome获取请求都可以,但当我尝试从我的web应用程序调用它时,它会显示以下错误: 我的客户代码非常简单: ge

我正在构建一个简单的基于Laravel的RESTAPI,它通过基于apache的Ubuntu服务器提供服务,Angular 6 web应用程序通过其HttpClient模块使用该服务器

它在我的本地主机上正常工作,直到我将它上传到Firebase主机,Firebase主机支持https。因此,我必须在我的服务器上实现一个商业SSL证书,通过邮递员处理POST请求或通过Google Chrome获取请求都可以,但当我尝试从我的web应用程序调用它时,它会显示以下错误:

我的客户代码非常简单:

generateReport(data) {
    const headers = new HttpHeaders({"Content-Type":"application/json"});
    return this.httpClient.post(this.env.apiURL+'excel/show/',
      data,
      {headers:headers});
  }
这是我的虚拟主机配置:

<VirtualHost *:443>
        ServerName eduardoibarra.com
        ServerAlias www.eduardoibarra.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine  on
        SSLCertificateFile /root/www_eduardoibarra_com.crt
        SSLCertificateKeyFile /root/server.key
        SSLCertificateChainFile /root/COMODORSADomainValidationSecureServerCA.crt
        <Directory /var/www/html>
                Order Allow,Deny
                Options FollowSymLinks
                Allow from all
                AllowOverride All
                RewriteEngine On
        </Directory>
</VirtualHost>
总而言之

Http服务器+本地主机客户端环境=工作正常

Https服务器+邮递员或Chrome=工作正常

Https服务器+Https客户端环境=出现上述301错误


*注意:我还通过barry的CORS库在Laravel上启用了CORS,使用头直接在public/index.php文件上启用,并在virtualhost配置上启用,结果相同。

也许您需要在Access allow Control Methods中显式允许OPTIONS方法。同样在apache中,您应该捕获选项并返回http状态200,因为选项返回301重定向

请尝试类似以下apache设置的操作:

<Location /laravel/public>
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
    Header always set Access-Control-Max-Age "1000"
    Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]
</Location>

您是否允许origins=>['troy-da34b.firebaseapp.com'],顺便说一句,您的服务器根目录必须是/var/www/html/public,这样您就可以请求POST了https://eduardoibarra.com/excel/showThanks Thijs Bouwes,我做了这两件事,但都没有成功,因为laravel的工作方式是404。将域添加到allowedOrigins会导致相同的301错误。嗯,eduardoibarra.com/excel/show不应该导致404,如果您将apache设置为服务于公共目录。你重新加载了apache吗?是的,但问题是我的apache服务器正在为/var/www/html/I提供服务。我在这个目录中有几个项目,其中一个是laravel文件夹。我会尝试用一个子域来纠正这个问题,但在我改成https之前它工作正常。我不推荐这种结构,因为它存在安全风险。将项目移动到它们自己的文件夹中,并从那里为它们提供服务。Laravel将通过公共目录提供服务。