仅在 https 上出现禁止的 403 错误,但 url http 工作正常

Posted

技术标签:

【中文标题】仅在 https 上出现禁止的 403 错误,但 url http 工作正常【英文标题】:Getting forbidden 403 error only on https but url http working fine 【发布时间】:2018-01-01 16:27:09 【问题描述】:

在我的服务器上,我在 root 和 codeigniter 项目上有 wordpress 站点作为 wordpress 中的子文件夹,我为 codeigniter 项目创建了子域。在没有 SSL 的情况下两者都可以正常工作现在我想在子域项目上应用 SSL,同时在这个我面临的问题上应用 ssl。当我使用 https://subdomain.example.com 打开站点时,它给了我禁止的 403 错误。

以下是我在 apache 上托管的网站的示例。我的根 wordpress 项目有符号链接。

http://example.com - 工作正常 - root 上的 wordpress 项目

http://subdomain.example.com - 工作正常 - wordpress 项目文件夹下的 codeigniter 项目

https://subdomain.example.com - 出现禁止错误

以下是我的 apache ssl 虚拟主机文件数据。

<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerAlias subdomain.example.com
                ServerName subdomain.example.com
                DocumentRoot /var/www/html/wordpress

                ErrorLog $APACHE_LOG_DIR/error.log
                CustomLog $APACHE_LOG_DIR/access.log combined

                SSLEngine on
                SSLCertificateFile      /home/ubuntu/wordpress/cdq/my-ssl-certifications/fc1d71b08ac8aab1.crt
                SSLCertificateKeyFile /home/ubuntu/wordpress/cdq/my-ssl-certifications/host.key
                SSLCertificateChainFile /home/ubuntu/wordpress/cdq/my-ssl-certifications/gd_bundle-g2-g1.crt
<FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
                <Directory /var/www/html/wordpress>
                        Options Indexes FollowSymLinks MultiViews
                        AllowOverride All
                        Require all granted
                </Directory>



        </VirtualHost>
</IfModule>

wordpress项目的htaccess

RewriteEngine On

RewriteCond %HTTP_HOST subdomain.example.com$
RewriteCond %REQUEST_URI !^/subfolder
RewriteRule ^(.*)$ /subfolder/$1 [L] 

RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %REQUEST_FILENAME -f [OR]
RewriteCond %REQUEST_FILENAME -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

子文件夹项目的htaccess

RewriteEngine on
RewriteBase /
RewriteCond %REQUEST_FILENAME -s [OR]
RewriteCond %REQUEST_FILENAME -l [OR]
RewriteCond %REQUEST_FILENAME -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^(.*)$ /index.php/$1 [L]

【问题讨论】:

您的错误日志中有什么内容吗? 我的日志中没有关于此的内容 你把你的 ci 项目改成 www-data 了吗? 是的帕克戴尔。当我在 url 中使用 http 时,它工作正常,只是在使用 https 时出现禁止错误 wordpress 站点 RewriteEngine 的 .htaccess 中不需要这样做 RewriteCond %HTTP_HOST subdomain.example.com$ RewriteCond %REQUEST_URI !^/subfolder RewriteRule ^(.*)$ /子文件夹/$1 [L] 【参考方案1】:

您的配置中有一些权限相关的问题:

<Directory /var/www/html/wordpress>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride All
                    Require all granted
</Directory>

它需要授予所有文件。所以你所要做的就是让它像:

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

P.S. 我已经修改了你的文件,你可以像这样使用它:

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
    ServerAlias subdomain.example.com
    ServerName subdomain.example.com
    DocumentRoot /var/www/html/wordpress
<Directory "/var/www/html/wordpress">
   AllowOverride All
</Directory>
    ErrorLog $APACHE_LOG_DIR/error.log
    CustomLog $APACHE_LOG_DIR/access.log combined
    SSLEngine on
            SSLCertificateFile      /home/ubuntu/wordpress/cdq/my-ssl-certifications/fc1d71b08ac8aab1.crt
            SSLCertificateKeyFile /home/ubuntu/wordpress/cdq/my-ssl-certifications/host.key
            SSLCertificateChainFile /home/ubuntu/wordpress/cdq/my-ssl-certifications/gd_bundle-g2-g1.crt
            <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
            </FilesMatch>
            <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
            </Directory>
    BrowserMatch "MSIE [2-6]" \
                    nokeepalive ssl-unclean-shutdown \
                    downgrade-1.0 force-response-1.0
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>

没有大的变化。我只是根据我的工作文件修改它。希望对你有帮助。

【讨论】:

感谢@Deepak Sharma。但是我的问题是通过正确设置权限来解决的。基本上主要问题是权限【参考方案2】:

终于解决了这个问题。问题在于项目文件夹结构的权限。现在一切正常

【讨论】:

以上是关于仅在 https 上出现禁止的 403 错误,但 url http 工作正常的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 应用程序 403 禁止错误:您无权访问此服务器上的 /

Yahoo Finance API 在旧 URL 和 User-Agent 上给出错误 403(禁止)

Ajax 发布 Django Rest Framework 出现 403 禁止错误

配置 LAMP - 出现 403 禁止错误

Nginx - 仅在静态文件上出现403错误

Oauth 2 + Spring Security - 出现 403 禁止错误