将WordPress子域重定向到Laravel主站点



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

我正在尝试弄清楚如何在Laravel应用程序的"/blog"URL上重定向或显示我的WordPress博客的内容。website.com/blog应该获取blog.website.com的内容,blog.website.com应该重定向到website.com/blog

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

//
// .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 Router)应用程序,我的web.php强制任何路由("api"或"blog"除外)返回欢迎视图,其中包含我的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/重定向会导致找不到Laravels的默认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后,没有任何反应。

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

登录到我的服务器,我已经导航到我的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).*$');

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

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

最后一步是为访问旧blog.website.comurl 的任何直接流量创建重定向,我已通过以下方式将其添加到我的.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>

最新更新