重定向时的 Apache vhost 双斜杠

Posted

技术标签:

【中文标题】重定向时的 Apache vhost 双斜杠【英文标题】:Apache vhost double slash on redirects 【发布时间】:2019-04-16 16:25:58 【问题描述】:

我试图在反向代理后面的 Laravel 应用程序中通过 Apache Vhost 重定向强制 FQDN 和 HTTPS。我现在的问题是用户有时会被重定向到带有双斜杠的 URL,例如https://exampledomain.xy//test 而不是 https://exampledomain.xy/test 我不知道为什么。

这是我的 apache vhost 配置:

<VirtualHost *:80>
 ServerName localhost
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html/public

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

 ErrorLog /dev/stderr
 TransferLog /dev/stdout
 RewriteEngine on
 RewriteCond %HTTP_HOST !=localhost
 RewriteCond %HTTP_HOST !=127.0.0.1
 RewriteCond %REMOTE_ADDR !=127.0.0.1
 RewriteCond %REMOTE_ADDR !=::1
 RewriteRule (.*) https://exampledomain.xy/$1 [L,R=301]
</VirtualHost>
<VirtualHost *:80>
 ServerAdmin webmaster@localhost
 DocumentRoot "/var/www/html/public"
 ServerName exampledomain.xy
</VirtualHost>

还有我的 .htaccess 文件(Laravel 自带的默认 .htacces 文件)

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]

# Handle Authorization Header
RewriteCond %HTTP:Authorization .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]

【问题讨论】:

【参考方案1】:

好的,看来我解决了这个问题。我在配置中更改了以下内容:

RewriteCond %HTTPS !on

RewriteRule ^(.*)$ https://stk-support.ukl.uni-freiburg.de$1 [R=301,L]

重写规则中的额外斜线导致问题,我还添加了 HTTPS 重写条件。

【讨论】:

以上是关于重定向时的 Apache vhost 双斜杠的主要内容,如果未能解决你的问题,请参考以下文章

使用 apache vhost 配置重定向到新域

回退 - 使用 apache vhost 配置重定向到新域

使用 apache vhost 配置有选择地重定向到新域

如何禁用 301 重定向,在 Apache 中将斜杠添加到目录名称

Apache2 vHost conf - 重定向到不同的服务器

apache中的vhost重写规则-摆脱子域而不重定向