通过 htaccess 从安装在 url 中没有子文件夹的子文件夹中的 WordPress 访问页面

问题描述 投票:0回答:1

我有两个 WordPress 安装,一个位于

example.com
,另一个位于
example.com/landing
,所以我需要做的就是每当有人访问
example.com/landing/page1
时显示位于
example.com/page1
的页面,而无需使用 htaccess 进行任何重定向。

我尝试了各种 htaccess 代码片段,其中一个似乎可以工作,它提供来自

/landing
子文件夹的页面,但现有网站
example.com/pages
的页面停止工作,这里是代码:

# RewriteCond %{REQUEST_URI} !^/landing/ [NC]
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule ^(.*)$ landing/$1 [L]

这可以通过 htaccess 实现吗?

php wordpress apache .htaccess server
1个回答
0
投票

...其中之一似乎可以工作,它提供来自

/landing
子文件夹的页面,但现有网站
example.com/pages
的页面停止工作,代码如下:

# RewriteCond %{REQUEST_URI} !^/landing/ [NC]
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule ^(.*)$ landing/$1 [L]

是的,正如您所说,这也会将根目录中的 WordPress 安装(以及所有资产)中的 all URL 重写到

/landing
子目录中的 WP 安装,因此根目录中的现有网站基本上会“中断” .

但是,如果这是“工作”以显示来自

/landing
站点的页面(就好像它们位于根目录中一样) - 正如您所建议的(因此
/landing
子目录中的 WP 安装必须已正确配置,即
WP_HOME
WP_SITEURL
变量集),那么您应该只定位
/page1
URL 而不是所有内容。例如:

# Rewrite "/page1" only to the WP installation in "/landing"
RewriteRule ^page1$ landing/$0 [L]

$0
反向引用包含与
RewriteRule
模式匹配的整个URL路径(在本例中只需保存重复的
page1
)。这是显式捕获整个 URL 路径并使用
$1
的替代方法。例如。
RewriteRule ^(page1)$ landing/$1 [L]

但是,这假设您直接链接到任何相关资产(CSS、JS、图像等),因此不需要对这些资产进行额外的 URL 重写。如果情况并非如此,并且您还需要将相关资源重写到

/landing
子目录,那么您需要将它们合并到上述规则中(或创建其他规则)。例如:

# Rewrite "/page1" and any relevant assets to the WP installation in "/landing"
RewriteCond %{REQUEST_URI} =/page1 [OR]
RewriteCond %{REQUEST_URI} =/wp-content/css/my-css.css [OR]
RewriteCond %{REQUEST_URI} =/wp-content/js/my-js.js [OR]
RewriteCond %{REQUEST_URI} =/wp-content/img/image1.jpg [OR]
RewriteCond %{REQUEST_URI} =/wp-content/img/image2.jpg
RewriteRule . landing%{REQUEST_URI} [L]

请注意,您需要有选择性地“重写”内容,否则您将回到重写根 WP 安装所依赖的资产并且根 WP 站点“中断”的相同问题。

请注意,我在上面的

conditions
= 指令)上使用了
RewriteCond
前缀运算符。这使得比较成为精确的字符串匹配,而不是正则表达式,因此无需转义特殊字符或使用正则表达式锚点等。

另请注意,最后一个

RewriteCond
指令没有(不得)具有
OR
标志。否则,它实际上将是无条件并再次重写所有内容!

© www.soinside.com 2019 - 2024. All rights reserved.