为什么 .htaccess 重定向在 http 中有效,但在 https 中无效?

为什么 .htaccess 重定向在 http 中有效,但在 https 中无效?

我有一个简单的 .htaccess 文件,它在网站的 http 版本上运行良好,但在 https 版本上却不行。为什么?

RewriteEngine on
#This is so if the file exists then use the file
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ %{REQUEST_FILENAME} [L]

#These conditions check if a file or folder exists just for reference
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d

#if someone adds ".php" to the slug get rid of it
RewriteRule ^(.*)\.php$ $1  

#don't add the [R] here because we don't want it to redirect
RewriteRule ^(.*)$ index.php?id=$1 [L,QSA]

答案1

这里的信息不够 100%,但在通常的默认 SSL 设置(例如 Red Hat/CentOS/Fedora)中,SSL 的 VirtualHost 是在其自己的容器中设置的。使用 mod_rewrite 至少需要在文档根目录上设置“AllowOverride FileInfo”才能使其起作用。

检查您的 SSL 配置(默认情况下为 /etc/httpd/conf.d/ssl.conf),确保它看起来像:

DocumentRoot /var/www/html
<Directory /var/www/html>
  AllowOverride FileInfo
</Directory>

AllowOverride 的默认值为“None”,因此任何其他添加 FileInfo 功能的设置(例如“All”)都是可以的。

http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride

答案2

是否可能是 HTTPS 服务器未启用 mod_rewrite,或者未使用 .htaccess?

检查AllowOveride常规网站使用的权限,并与 SSL 版本进行比较,可能存在差异。如果不是意外,可能是为了提高安全性而引入的。

mod_rewrite然而这是至关重要的,所以任何可靠的托管服务提供商都应该帮助解决这个问题。

答案3

“正在使用 apache2 + ubuntu precise”

我在使用时也遇到了类似的问题纤薄框架并尝试删除 url 中所需的 index.php。reWrite 对于 http 完美运行,但对于 https:它显示未找到 url,这意味着 reWrite 不起作用。

经过反复尝试,我想出了这个解决方案:

 cd /etc/apache2/sites-enabled
 sudo vim default-ssl

将 AllowOverride None 更改为全部。 相似地sudo vim ssl

答案4

我遇到了类似的问题,这对我有用。

在您的 httpd.conf 中,确保您同时拥有:

服务器名称 domain.com

服务器别名 www.domain.com

相关内容