首页 > 解决方案 > .htaccess 子文件夹的根 url,以及根文件夹的特定 url

问题描述

我的设置很奇怪,不用说我在我可以改变的方面特别有限。目前,对我来说最容易更改的是服务器的.htaccess文件。当前目录设置如下所示:

/是一个wordpress安装

/front-end是一个使用 wordpress 安装 REST API 来获取数据的反应网站

我正在尝试获取它,以便当我访问example.com它时提供内容,/front-end但所有请求/dashboard都来自根目录。

例如,这些 URL 将执行以下操作:

//contact指向目录中的index.html文件front-end(react-router 会选择/contact

/dashboard/wp-admin/dashboard/wp-json/menus让路由目录中的 wordpress 接管。(这些总是会开始/dashboard

我试图实现的目标是什么?

我有这个开始,但我不确定如何忽略/dashboard路线

RewriteBase /
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s
RewriteCond %{DOCUMENT_ROOT}/front-end/%{REQUEST_URI} -s
RewriteRule . /front-end/index.html [L]

标签: .htaccessredirect

解决方案


RewriteEngine On
RewriteRule ^/?dashboard/(.*)$ /$1?wordpress=true [L,NC]
RewriteCond %{QUERY_STRING} !^.*wordpress=true.*$ [NC]
RewriteCond %{REQUEST_URI} !^/?front\-end.*$ [NC]
RewriteRule ^(.*)$ front-end/$1 [L,NC]
  • 在上面的规则中,我们首先检查我们dashboard的请求中是否有。如果是,我们会故意附加一个查询字符串wordpress=true,以避免与您的 react 文件夹混淆并遇到太多重定向问题。

  • 这样,我们也知道当前请求是 forwordpress并且进一步的重写规则不应该触及它。

  • 在第二个重写规则中,我们检查是否有条件,wordpress=true并查看 URL 中是否没有front-end(也适用于内部路由,无需明确指定)。如果它通过了两个测试,我们将它重定向到您的 react front-end,否则我们让它按原样执行。

  • 附加的原因!^/?front\-end.*$是为了避免无限的内部重定向到自身。


推荐阅读