.htaccess 在Wordpress多站点中使用HTACCESS将子目录添加到WP内容URL

q9rjltbz  于 2022-11-16  发布在  WordPress
关注(0)|答案(3)|浏览(174)

我正在将我的单站点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.)公共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.)公共_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]
mwkjh3gx

mwkjh3gx1#

首先,您应该删除所有.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/(.*)Map到wordpress/wp-content/$1
此外,此规则必须是.htaccess文件中的第一条,才能优先于以下默认的WordPress规则。public_html/中的最终和唯一.htaccess应该如下所示:

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]

希望对你有帮助。

slmsl1lt

slmsl1lt2#

您不必在子目录中设置多个.htaccess文件。
唯一需要修改的.htaccess文件是位于应用程序根目录中的文件,在您的示例中,它似乎是您的public_html/.htaccesspublic_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,你需要在WordPress代码块之前添加你的RewriteRules。由于RewriteRules是从上到下处理的,如果请求首先被WordPress代码块重写为index.php,那么你的规则将永远不会被处理。
因此,您的重写规则:

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

如果将其放在根目录.htaccess的顶部,并删除子目录中的.htaccess文件,则应该足够了

nfzehxib

nfzehxib3#

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

如果您已经在子目录中安装了WordPress多站点,那么您就不能使用子域。
如果您已经在www.example.com上安装了一个站点example.com,并且您在运行Multisite的子目录中添加了另一个WordPress安装,那么它的地址将是example.com/wordpress。
您在新网络上创建的任何站点都将位于example.com/wordpress/my-new-site。在此无法创建子目录,因为它必须位于类似www.example.com的地址example.com/wordpress/my-new-site.network,而这是行不通的。

相关问题