【问题标题】:Redirect domain to other domains subdirectory but show first domain in address bar?将域重定向到其他域子目录但在地址栏中显示第一个域?
【发布时间】:2021-04-24 19:12:02
【问题描述】:

我想将“abc.com”重定向到“xyz.com/abc”,但仍然在浏览器的地址栏中显示“abc.com”。据我了解,您将使用重写规则来实现这一点。

我拥有两个域并且两个页面都在同一台服务器上。

它是一个 ionos 网络服务器。该网站本身位于

/clickandbuilds/mywebsite(假设这是“xyz.com”)

现在这个网站上有一个子页面(“xyz.com/my-landing-page”)

也可以通过自己的域访问(比如说“abc.com”)

现在我使用一个简单的 http 重定向,所有对“abc.com 的请求都被重定向到”xyz.com/my-landing-page”。这正是我想要的,但我不想显示登陆页面的 url 但顶级域 (xyz.

这种情况会是什么样子?

htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
AddHandler x-mapp-php5.5  .php
# BEGIN rlrssslReallySimpleSSL rsssl_version[3.3.5]
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteCond %{REQUEST_URI} !wp-content\/cache\/(all|wpfc-mobile-cache)
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

【问题讨论】:

  • 欢迎来到 SO,请在您的问题中分享您的 htaccess 规则文件,以便更好地理解您的问题,谢谢。
  • 还有关于你的实际域设置的信息——哪个指向哪个文件夹,等等。
  • 大家好,htaccess 文件几乎是空的,到目前为止,只有几个条目构成了一个 wordpress 缓存插件。
  • @d1ouh9d1,如果没有看到 Htaccess 文件和 Cbroe 询问的信息,在这里将很难提供帮助,所以请在您的问题中添加详细信息,然后让我们知道,谢谢。
  • 我已经用请求的信息更新了我的问题

标签: apache .htaccess url mod-rewrite url-rewriting


【解决方案1】:

你有两个明显的选择,哪个对你更好取决于具体情况:

  1. 内部重写策略:

您需要注意重写模块实际上已加载到 http 服务器中:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^abc\.com$
RewriteCond %{REQUEST_URI} !^/abc
RewriteRule ^ /abc%{REQUEST_URI} [QSA,END]

这种方法可以在实际的 http 服务器的主机配置(应该是首选)或分布式配置文件(“.htaccess”)中实现,以防您没有访问真实的配置(阅读:如果您使用便宜的托管服务提供商)。

  1. 内部代理策略:

您可以直接使用代理模块,而不是使用重写模块:

ProxyPass / https://example.com/abc/
ProxyPassReverse / https://example.com/abc/

然而,这需要在实际的 http 服务器的主机配置中实现。所以你需要访问它。

使用重写模块(在内部使用代理模块)可以实现相同的目的。这也将允许为这种方法使用分布式配置文件(“.htaccess”):

RewriteEngine on
RewriteCond %{HTTP_HOST} ^abc\.com$
RewriteCond %{REQUEST_URI} !^/abc
RewriteRule ^ https://example.com/abc%{REQUEST_URI} [P]

这两个基于代理的选项都有一个缺点,即性能是一个问题,因为您需要为每个传入请求提供完整的额外内部 http 请求。


一般来说,出于性能原因,第一种方法更有意义。但是,这必须由您的应用程序逻辑支持:这仅在您的应用程序使用相对引用(“链接”)时才有效。如果它使用绝对 URL 而您无法更改,则需要深入研究第二种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多