【问题标题】:How can I make all example.com pages redirect to example.com/smth如何使所有 example.com 页面重定向到 example.com/smth
【发布时间】:2020-09-14 16:10:39
【问题描述】:

当我设置我的 WP 网站时,我没有将它直接安装到 public_html 中,而是将它安装在 public_html/my_subdir 中。为此,我制作了以下 .htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir/index.php [L] 
</IfModule>

然后,我想将www.example.com 重定向到www.example.com/dev,所以我从 Cpanel 添加了一个 301 重定向。上面的 htaccess 在 Cpanel 中创建了一个重定向规则,它与我的新重定向冲突,所以我删除了第一个,我的 htaccess 最终为:

<IfModule mod_rewrite.c>
RewriteEngine on
</IfModule>
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/dev\/" [R=301,L]

它有效,如果我转到 www.example.com,它会将我带到 www.example.com/dev,但如果我转到 www.example.com/services,它会将我带到错误 404 页面。

我怎样才能让它去任何 example.com 页面将我带到 example.com/dev 中的等价物,例如 example.com/services = example.com/dev/services

【问题讨论】:

  • 您是否在同一个帐户上托管多个域?
  • 不,我实际上已经找到了解决方案,所以我回复了自己让其他人看到。我还对我正在做的事情做了一个广泛的解释:)
  • 如果您没有托管多个域,那么所有检查请求的Host 标头的条件都是多余的。

标签: php wordpress .htaccess


【解决方案1】:

好的,我刚刚意识到解决方案比我想象的要简单:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir/index.php [L] 
</IfModule>

我一直在我的问题中写下答案。只是为了将来的人做同样的事情:我的 public_html 文件夹中有 2 个网站(在两个不同的文件夹中)(因为我是一个保持井井有条的怪胎):

my_subdir(我的旧网站)

my_subdir_2(新网站,正在建设中)

我希望两个站点都在同一个域下工作,避免整个备份、更改 WP 域数据、备份、移动到新域等等等等。

所以,我进行了设置,以便 www.example.com 将重定向到 www.example.com/my_subdir(我的旧网站),我的新网站可以在 www.example.com/my_subdir_2 访问(这样我就可以继续工作了。

上面的代码使它像这样工作,您可以将 WP 的通用域设置为两个站点的 example.com。

完成新网站后,我将(备份)并删除旧网站的文件夹并将 htaccess 更改为:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir_2/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir_2/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir_2/index.php [L] 
</IfModule>

【讨论】:

    【解决方案2】:
    RewriteRule ^/?$ "https\:\/\/www\.example\.com\/dev\/" [R=301,L]
    

    这只会将文档根目录 (^/?$) 重定向到 /dev/。要将/&lt;anything&gt; 重定向到/dev/&lt;anything&gt;,您需要将指令更改为以下内容:

    RewriteRule (.*) https://www.example.com/dev/$1 [R=301,L]
    

    RewriteRule 中的所有反斜杠转义 替换 都不是必需的 - 这在 cPanel 中非常典型。)

    但是,这将导致重定向循环,因为它也会重定向/dev/&lt;anything&gt; 本身。因此,您可以将上面的内容更改为:

    RewriteRule !^dev/ https://www.example.com/dev%{REQUEST_URI} [R=301,L]
    

    首先使用 302(临时)重定向进行测试,仅当您确定它按预期工作时才更改为 301(永久) - 以避免潜在的缓存问题。

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 2011-02-28
      • 2016-04-05
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多