【问题标题】:Redirect WordPress subdomain to Laravel main site将 WordPress 子域重定向到 Laravel 主站点
【发布时间】:2021-01-10 12:02:03
【问题描述】:

我有 2 个站点,一个在我的主域上运行的 Laravel/Vuejs 应用程序(例如website.com)和一个在子域上运行的简单 WordPress 博客(例如blog.website.com)。我不想将我的 WordPress 博客作为子文件夹放在我的 Laravel 应用程序的公共文件夹中,但我想像现在一样将两个站点分开。

我试图弄清楚如何在我的 Laravel 应用程序的“/blog”网址上重定向或显示我的 WordPress 博客的内容。 website.com/blog 应该得到blog.website.com 的内容,blog.website.com 应该重定向到website.com/blog

您可以在下面找到我的.htaccess 文件中的重定向,将我的blog.website.com 重写为website.com/blog,这就像一个魅力!我的子域使用尾随“/blog”重定向到我的 Laravel 应用程序。

//
// .htaccess
//

# Rewrite subdomain to main url.
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^blog.website.com [NC]
  RewriteRule ^(.*)$ https://website.com/blog/$1 [R=301,L]
</IfModule>

现在这是棘手的部分开始的地方。我的 Laravel 应用程序显示一个 Vuejs(带有 Vue 路由器)应用程序,我的 web.php 强制任何路由(“api”或“博客”除外)返回欢迎视图,其中包含我的 Vuejs 资产(CSS、JS 等)。我还在我的 web.php 文件中添加了一个“/blog”异常,以便在访问者访问博客页面时重定向他们,如下面的代码所示:

//
// web.php
//

Route::get('/{any?}', function (){
  return view('welcome');
})->where('any', '^(?!api|blog).*$');

Route::get('/blog', function () {
  return redirect('https://blog.website.com/');
});

按预期捆绑在一起的所有内容都会导致 ERR_TOO_MANY_REDIRECTS 错误或无限重定向循环。访问 blog.website.com 会导致 url 重写为 website.com/blog,然后将“返回”重定向到 blog.website.com

web.php 文件中删除 https://blog.website.com/ 重定向会导致 Laravel 找不到默认的 404 页面。那么,我该如何解决这个重定向问题,让我的 Laravel 和 WordPress 环境彼此分开呢?

编辑:

正如 Kamlesh Paul 建议的那样,我尝试通过在 http 块内添加服务器块来编辑我的 nginx.conf 文件:

//
// /etc/nginx/nginx.conf
//

http {
    ...
    server {
        server_name blog.website.com;
        return 301 https://www.website.com/blog$request_uri;
    }
}

在删除所有其他可能的解决方案(.htaccessweb.php 更改)并重新启动服务器/nginx 后,没有任何反应。

【问题讨论】:

  • 它在 sharedhost 或 vps 上。?
  • 嗨,Kamlesh Paul,两者都托管在 VPS 上!
  • 您是否为子域创建了配置。?它是 nginx 或 apache2
  • in Route::get('/blog', function () { 你不应该展示你的博客吗?而不是重定向到旧博客?意思是,return view('welcome');return view('blog-index'); 或类似的东西
  • /blog 应该显示blog.website.com 子域的内容。

标签: wordpress laravel .htaccess redirect


【解决方案1】:

尽管尝试了 cmets 的几种解决方案,但我还是设法通过使用符号链接解决了我的问题!

登录到我的服务器后,我导航到了我的 Laravel 应用程序的公共文件夹(以下文件夹结构可能因操作系统而异)。

cd /var/www/vhosts/website.com/httpdocs/public

使用以下代码,我创建了一个symlinksymbolic link,它(或多或少)充当我的子域的快捷方式。

ln -s /var/www/vhosts/website.com/blog.website.com/ blog

此代码在我的 Laravel 应用程序的 public 文件夹中创建一个 blog 文件夹,并将其链接到我的 WordPress 博客的根文件夹。

接下来,我删除了对 web.php 中博客子域的重定向,现在看起来如下所示:

//
// web.php
//

Route::get('/{any?}', function (){
    return view('welcome');
})->where('any', '^(?!api|blog).*$');

从服务特定视图中排除我的 Laravel 应用程序 url 和尾随 /blog,允许 Laravel 应用程序在检索 public 文件夹中的 blog 文件夹时回退。由于blog 文件夹链接到我的子域,因此显示了 WordPress 博客!

这使我可以登录到我的 WordPress 仪表板,以便在常规设置中将我的博客的站点 URL 和家庭地址从 https://blog.website.com 更改为 https://website.com/blog。这还修复/实现了所有帖子类型(帖子、页面等)的新 URL 结构。如果这不能为您解决问题,只需访问“永久链接”页面以自动刷新所有 URL(即使看起来什么都没有发生)。

最后一步是为访问旧 blog.website.com 网址的任何直接流量创建重定向,我已通过以下方式将其添加到我的 .htaccess 文件中:

//
// .htaccess
//

# Rewrite subdomain to main url.
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^blog.website.com [NC]
  RewriteRule ^(.*)$ https://website.com/blog/$1 [R=301,L]
</IfModule>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多