【问题标题】:Add Subdirectory to WP-CONTENT URL using HTACCESS in Wordpress Multisite在 Wordpress 多站点中使用 HTACCESS 将子目录添加到 WP-CONTENT URL
【发布时间】:2022-11-11 02:50:14
【问题描述】:

我正在将我的单站点 WordPress 安装转换为多站点。我正在尝试从我的主站点修复损坏的 CSS/JS。

我目前在我的网络上有两个站点:

我的多站点安装位于我们将称为“WordPress"。所以文件路径看起来像public_html/wordpress

我的目标是两个站点的 URL 中都没有“wordpress”子目录。除了主站点上的损坏的 CSS 和 JS 之外,一切似乎都正常工作(辅助站点看起来很好)。

检查代码时,所有 CSS 和 JS 调用都指向http://www.example.com/wp-content/,但在那里找不到文件。如果我在浏览器中转到http://www.example.com/wordpress/wp-content,就会找到这些文件。我想隐藏 wordpress 文件夹并且仍然能够检索文件。

我对如何设置 HTACCESS 文件感到困惑。我已经对其进行了一些初始更改,以使子目录中的多站点正常工作。这些都是我在 StackOverflow 和其他在线网站上找到的关于如何将您的站点移动到带有子目录和隐藏子目录的多站点的指南。我还没有找到任何有关解决损坏的 CSS/JS 问题的信息。

我想我需要对 3 个 HTACCESS 文件中的一个或多个进行更新。

1.) public_html/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wordpress/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wordpress/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ /wordpress/index.php [L] 
</IfModule>

2.) public_html/wordpress/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
</IfModule>

3.) public_html/wordpress/wp-content/.htaccess该文件不存在,但我创建了它。我的想法是在没有 wordpress 子目录的情况下调用文件,但它们需要表现得好像它们包含在其中的子目录一样。例如,当前http://www.example.com/wp-content/uploads/image.jpg 已损坏但http://www.example.com/wordpress/wp-content/uploads/image.jpg 有效。我希望它是相反的方式,或者我希望两条路径都能工作。

<IfModule mod_rewrite.c>
RewriteEngine on
# ADD WORDPRESS IF URL DOES NOT HAVE IT
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wordpress/
RewriteRule ^(.*)$ /wordpress/$1
</IfModule>

我尝试向各种 HTACCESS 文件添加不同的行,但它们都不起作用。我也不确定应该插入新规则的行号。我的一条新规则可能是正确的,但它在错误的地方。下面是一个我真的认为会起作用但没有起作用的方法。

RewriteRule ^/wp-content/(.*)$ /wordpress/wp-content/$1 [R=301,NC,L]

【问题讨论】:

  • 我猜第二个是在您启用多站点后生成的。如果是真的,那么正确的位置是在第一个“htaccess”文件中。您肯定不需要第三个文件
  • 是的,这是真的。第二个来自我在网上找到的关于启用多站点功能的指南。我删除了第三个 htaccess 文件并将代码放在第一个 htaccess 中(public_html 根目录下的那个),但没有任何改变。

标签: php css wordpress apache .htaccess


【解决方案1】:

首先,您应该删除所有.htaccess 文件并只保留根目录中的一个:public_html/.htaccess

其次,您的最后一条规则不起作用,因为有点错误。

您应该将其更改为:

RewriteRule ^/wp-content/(.*)$ /wordpress/wp-content/$1 [R=301,NC,L]

至:

RewriteRule ^wp-content/(.*)$ wordpress/wp-content/$1 [L,NC]

因为你不需要开头的/,也不需要301重定向。您希望隐藏您的 wordpress 文件夹,只需将请求的 URL 从 wp-content/(.*) 映射到 wordpress/wp-content/$1

此外,此规则必须是您的 .htaccess 文件中第一个优先于遵循默认 Wordpress 规则的规则。你的最终和只要.htaccess 来自 public_html/ 应该是这样的:

RewriteEngine On
RewriteBase /
RewriteRule ^wp-content/(.*)$ wordpress/wp-content/$1 [L,nc]
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

我希望它对你有帮助。

【讨论】:

    【解决方案2】:

    您不必在子目录中设置多个.htaccess 文件。

    唯一需要修改的.htaccess 文件是位于应用程序根目录中的文件。在您的情况下,它似乎是您的public_html/.htaccess 或您的public_html/wordpress

    现在默认情况下,WordPress 在该目录中生成一个.htaccess 文件,如下所示:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
    

    为了重写你的 URL,你需要添加你的 RewriteRules在 WordPress 代码块之前. 由于 RewriteRules 是从上到下处理的,如果请求首先被 WordPress 块重写为index.php,那么您的规则将永远不会被处理。

    因此,您的 RewriteRule:

    RewriteRule ^/wp-content/(.*)$ /wordpress/wp-content/$1 [R=301,NC,L]
    

    放在根目录的.htaccess的最上面应该够了,去掉子目录下的.htaccess文件

    【讨论】:

      【解决方案3】:

      最多多站点网络安装在站点的根目录中。这意味着如果您的服务器使用的是 example.com,那么这将是您在网络上的基本站点的 URL。

      如果您在子目录中安装了 WordPress Multisite,则不能使用子域。

      如果您已经在 example.com 上安装了单个站点,并且您在运行 Multisite 的子目录中添加了另一个 WordPress 安装,则其地址将为 example.com/wordpress。

      您在新网络上创建的任何站点都将位于 example.com/wordpress/my-new-site。在这里创建子目录是不可能的,因为它必须位于像 example.com/wordpress/my-new-site.network 这样的地址,这不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-15
        • 1970-01-01
        • 1970-01-01
        • 2015-05-30
        相关资源
        最近更新 更多