为什么.htaccess重定向在http中起作用但在https中不起作用?


10

我有一个简单的.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]

Answers:


20

这里没有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的默认值为“无”,因此添加FileInfo功能的任何其他设置(例如“全部”)都可以。

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


1
我在Linux中看不到/etc/httpd/conf.d/ssl.conf,如何找到它?
Ashok KS 2014年

1
(1)您可能需要搜索conf文件。例如,在某些系统上,它是/etc/apache2/sites-enabled/default-ssl.conf(2)要非常清楚,如果仍然有问题,请尝试AllowOverride All使用AllowOverride FileInfo。一旦工作,您就可以AllowOveride详细阅读Apache 文档,以更具体地限制访问权限,以最大程度地提高安全性。(3)请记住,必须重新启动apache才能使设置生效。
SilentSteel

4

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

检查AllowOveride常规站点的使用权限,然后将其与SSL版本进行比较(可能存在差异)。如果不是偶然的话,可能是为了提高安全性而引入的。

mod_rewrite 尽管这是必不可少的,所以任何体面的托管服务提供商都应帮助解决这一问题。


1

“在apache2 + ubuntu上工作精确”

我在使用Slim框架并尝试删除url中所需的index.php时,发生了类似的问题。reWrite对于http而言非常适合于HTTP,但对于https:它显示未找到url,这意味着reWrite无法正常工作。

经过一番打击,我想出了以下解决方案:

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

将AllowOverride None更改为All。类似的sudo vim ssl


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.