如何在多站点环境中从WordPress永久链接中排除目录?

时间:2021-03-14 作者:Nils

场景如下:
一个包含三个站点的多站点安装:

  • site1.com (管理)site2.com
  • site3.com
Q: 如何排除位于根目录中的文件夹,该文件夹还应与site3.com?

即:排除不属于WordPress的特定目录,以便可以从以下位置访问该目录:site3.com/folderToExclude/

回到过去site3.com 是一个独立的站点(现在是所提到的MU安装的一部分),此规则用于:

RewriteCond %{REQUEST_URI} !^/(folderToExclude/.*)$
但情况已经不是这样了。

这是文件的外观:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]

RewriteCond %{REQUEST_URI} !^/(folderToExclude/.*)$

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) WordPress_04/$1 [L]
RewriteRule ^(.*\\.php)$ WordPress_04/$1 [L]

RewriteRule . index.php [L]

</IfModule>
# END WordPress

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

本文件;例外情况;仅当您在中请求虚拟URL时才需要/folderToExclude, 与物理文件相反。标准WordPress指令自然会排除对物理目录和文件的任何请求。

RewriteCond %{REQUEST_URI} !^/(folderToExclude/.*)$

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
这种情况(RewriteCond 指令)不会在您放置的位置执行任何操作。RewriteCond 指令本身不做任何事情,它们应用于第一个RewriteRule 随后的指令。在这种情况下,上述规则检查请求URL路径是否匹配/wp-admin 并且不会启动/foldertoExclude/ - 条件总是成功的(如果A=B,那么A!=C),所以什么都不做。

然而,正如所写的,您也不能将该条件放在后面的规则上,因为逻辑是颠倒的。(也许您过去在单站点WordPress安装中使用过这个?)

删除该选项RewriteCond 指令。

与其修改WordPress代码块,不如在# BEGIN WordPress 节,以排除所有启动/folderToExclude 不会被WordPress指令处理。

例如:

# Exclude specific directories
RewriteRule ^folderToExclude($|/) - [L]

# BEGIN WordPress
:
无需重复RewriteEngine 指令。没有其他RewriteCond 指令是必要的。

另一种方法是创建另一个.htaccess 中的文件/folderToExclude 具有单个RewriteEngine Off (或On) 指令。然后,这将覆盖父级中的WordPress mod\\u rewrite指令.htaccess 文件

相关推荐

将未登录用户重定向到.htaccess文件中的自定义注册/登录页面的规则

我正在尝试从"/purchaseads/purchase.php" 自定义注册/登录url"/purchaseads/registrationurl"在wordpress网站上。不幸的是,当访问url时"/purchaseads/purchase.php" 即使是未登录的用户,也不会更改任何内容,不会重定向到自定义注册/登录表单。这个我使用的httaccess代码段如下RewriteCond %{HTTP_COOKIE} !.*wordpress