使用 301 apache 从 https://domain.tld 到 https://domain.tld/subdir/ 进行多次重定向

使用 301 apache 从 https://domain.tld 到 https://domain.tld/subdir/ 进行多次重定向

我目前使用 Apache2 进行设置,以便进行加密

http://domain.tld => https://domain.tld
http://www.domain.tld => https://www.domain.tld

它的工作完美,

现在我想将我的所有域名访问移动到子目录

http://domain.tld => https://domain.tld/subdir ( Done! its working )

但是当我尝试将 https domainName 访问重定向到 subdir 时,我收到多次重定向。

https://domain.tld => https://domain.tld/subdir ( Endless redirect to 
https://domain.tld/subdir/subdir/subdir/ and so on )

000-默认-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost domain.tld:443>
   ServerName domain.tld
   ServerAlias www.domain.tld

   DocumentRoot /var/www/domain.tld/html
   Redirect permanent / https://domain.tld/abc

   SSLCertificateFile /etc/letsencrypt/live/domain.tld/cert.pem
   SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem
   Include /etc/letsencrypt/options-ssl-apache.conf
   SSLCertificateChainFile /etc/letsencrypt/live/domain.tld/chain.pem

</VirtualHost>
</IfModule>

000-默认.conf

<VirtualHost domain.tld:80>
   ServerName domain.tld
   ServerAlias www.domain.tld

   DocumentRoot /var/www/domain.tld/html

   # This works like a charm !( DONE! )
   Redirect 301 / https://domain.tld/roll-out/

# RewriteEngine on
# RewriteCond %{SERVER_NAME} =domain.tld [OR]
# RewriteCond %{SERVER_NAME} =www.domain.tld
# RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

我已经评论了最后三行,请帮我理解为什么会发生这种情况以及解决方案是什么。

多谢!

答案1

<VirtualHost example.tld:443>
   ServerName example.tld
   Redirect permanent / https://example.tld/abc

https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect

然后任何请求开始带 URL 路径的 URL 将在目标 URL 的位置向客户端返回重定向请求。附加匹配的 URL 路径以外的路径信息将被附加到目标 URL。

通过使用“ /”作为 URL 路径和“ /abc”,目标 URL /abc 也将被匹配并重定向到/abc/abc

您可能想要的是仅匹配裸域并将其重定向到/abc,对吗?

用一个RedirectMatch反而:

RedirectMatch permanent ^/$ https://domain.tld/abc

相关内容