htaccess重定向缺少斜线,而是添加到域名tld中。

问题描述 投票:1回答:1

我在一个生产型网站上遇到了一个问题,我做了一个htaccess规则,如果主机名不是 "app.example.com "就重定向。我做了一个htaccess规则,如果主机名不是 "app.example.com "就重定向。如果不是,我想重定向到那个主机名。

我是这样做的。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^app.example.com/$ [NC]
RewriteRule ^(.*)$ https://app.example.com//$1 [R=302,L]

对于根路径来说,它工作得很好,但是,如果我转到一个像这样的URL: https:/example.comsomething... 我被重定向到 https:/example.comsomething

我到底做错了什么?

我也试过这些组合,但不成功。

RewriteRule ^(.+[^/])/$ https://app.example.com/$1 [R=302,L]
RewriteRule ^(.*)([^/])$ https://app.example.com/$1$2/ [L,R=302]
RewriteRule ^(.*)$ https://app.example.com//$1 [R=302,L]
.htaccess mod-rewrite url-rewriting
1个回答
0
投票

与其玩猜谜游戏,我建议你应该阅读文档,了解你所使用的工具的实际作用。不要误会,我不是想嘲笑你或任何东西。但这不是火箭科学,而且有 优秀的文档,并配有优秀的例子......

RewriteEngine On
RewriteCond %{HTTP_HOST} !^app\.example\.com/$ [NC]
RewriteRule ^ https://app.example.com%{REQUEST_URI} [R=302,END]

最好是先用302的临时重定向,然后再改成301的永久重定向,一旦你确定一切都设置正确了。这可以防止在尝试事情时出现缓存问题......

如果你使用上面的规则收到了一个内部服务器错误(http状态500),那么很有可能你操作的是一个非常老版本的apache http服务器。你会看到一个明确的提示,即不支持的 [END] 在这种情况下,你的http服务器错误日志文件中的标志。你可以尝试升级或者使用旧的 [L] 标志,在这种情况下,它可能也会同样工作,尽管这取决于你的设置。

这个实现同样可以在http服务器主机配置或分布式配置文件(".htaccess "文件)中使用。显然,重写模块需要在http服务器中加载,并在http主机中启用。如果你使用分布式配置文件,你需要注意在主机配置中启用它的解释,并且它位于主机的 DOCUMENT_ROOT 文件夹中。

还有一句话:你应该把这些规则放在http服务器的主机配置中,而不是使用分布式配置文件(".htaccess")。这些分布式配置文件增加了复杂性,经常会导致意外行为,很难调试,而且它们真的会拖慢 http 服务器的速度。它们只是作为最后的选择,在你无法访问真正的http服务器主机配置的情况下(阅读:非常便宜的服务提供商),或者对于坚持编写自己的规则的应用程序(这显然是一个安全噩梦)。

© www.soinside.com 2019 - 2024. All rights reserved.