Tags: , , , , , 10, Posted in WordPress 2 条留言

21今天突然手闲,想试试传闻已久的WordPress多站点模式(WordPress Multisite),于是用手上的一个DirectSpace年付的VPS(性能?淡定……)临时搭建了一个LAMP,按照WordPress Codex的操作一步一步对WordPress进行修改,按照子目录的形式最后写入 .htaccess 并建立了子站点,但是出现一个问题,子站点可以访问,但是无法加载CSS和图片等东西。

初步判断应该是 .htaccess 里面Rewrite规则可能有问题,但那是官方提供的,不应该吧……
于是通过Google大神一番搜索,确定是Rewrite规则有问题,并将 .htaccess 文件替换为以下内容后工作正常:

WordPress Multisite Based Sub-folder Mode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
 
# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [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]

————————————————我是分割线————————————————

我刚才重新弄了一下想重演故障,结果发现没问题了,记得看过一篇POST提到WP有个缓存机制导致了这个问题,不过我把 .htaccess 更新了以上代码后,就工作正常了,一时也没留意是否跟WP给出的范例代码是否有所不同,纠结了……放这儿备查吧。

————————————————我是分割线————————————————

Update: Jan 13th, 2011
终于发现问题所在了,由于我手欠,没有使用启用Network功能时 /wp-admin/network.php 提供的 .htaccess 内容,而直接使用了Codex.WordPress提供的Rewrite规则,于是 ……
来自Codex.WordPress的Rewrite规则呈现如下(无法工作的,仅供参考,别用……):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
 
# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [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).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
# END WordPress

主要区别在于以下两句,正好影响到的是主题布景(Theme)、后台管理等功能:

有效的规则:

1
2
RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]

无效的规则:

1
2
RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]

-EOF-

——————–
引用参考:
WordPress Support: http://wordpress.org/support/topic/wp-multisite-htaccess-not-working
Perishable Pre: http://perishablepress.com/press/2010/07/07/htaccess-code-for-wordpress-multisite/
WordPress Codex: http://codex.wordpress.org/Migrating_Multiple_Blogs_into_WordPress_3.0_Multisite
WordPress Codex: http://codex.wordpress.org/Create_A_Network

January 11, 2011