我使用Apache 2.4,并设置了两个虚拟目录。 一个需要SSL,另一个redirect到它。
如果用户尝试访问不存在/ derp的https://www.derp.com/derp ,则他们会正确获得404。但是,当用户访问http://www.derp.com/derp ,Apache会错误地redirect用户到https://www.derp.comderp ,删除path和域名之间的斜线。
我不知道是什么原因造成的。
以下是我的虚拟主机的设置。
<VirtualHost *:443> ServerAdmin [email protected] ServerName www.derp.com ServerAlias derp.com DocumentRoot "C:\Users\derp\Documents\Web Projects\derp" SSLEngine on SSLCertificateFile "C:\Apache24\certs\cert.cer" SSLCertificateKeyFile "C:\Apache24\certs\key.key" </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] ServerName www.derp.com ServerAlias derp.com Redirect permanent / https://www.derp.com/ </VirtualHost> <Directory "C:\Users\derp\Documents\Web Projects\derp"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted SSLRequireSSL </Directory>
为什么Apache会这样做?
红利问题:redirect应该在我的虚拟主机定义中处理,还是应该在网站物理目录的.htaccess文件中处理?
编辑:
我正在启动一个Laravel项目,默认情况下公共文件夹包含一个.htaccess文件,所以这里是那个人:
<IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
编辑二:
我试过了:
我也完全从目录中删除了.htaccess文件。
当您从http://www.derp.com转到https://www.derp.com时,它会正确redirect。 这只是当你指定一个path,并尝试https,它删除域和path之间的斜线。
编辑三:
我也尝试了以下build议:
Redirect permanent / https://www.derp.com/ Try RedirectMatch permanent /(.*) https://www.derp.com/$1 or RedirectMatch permanent (.*) https://www.derp.com/$1
…而不是redirect到https://www.derp.comderp ,而不是redirect,尝试并为http://www.derp.com/derp提供404,但使用Apache的404,而不是抛出一个未发现的例外,因为Laravel没有configuration。
你Laravel的.htaccess看起来。 这似乎只是一个简单的.htaccess SEF / SEO友好的URL我假设。 所以不是这样的:
<IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
试试这个:
<IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
L4.1不像以前那样在.htaccess中redirect尾部斜线,而不是在基础应用程序类中
# Redirect Trailing Slashes… RewriteRule ^(.*)/$ /$1 [L,R=301]
只是评论一下