目前,我正在使用 Zeus 服务器,我们有一个使用 Wordpress 开发的网站。Zeus 服务器不支持安装 wordpress 和 SEO 所需的 .htaccess 文件。但是,我们可以通过定义一些重写规则来管理 Zeus 以完成我们的任务。
对于 WordPress,我们目前使用以下重写规则:
RULE_0_START:
# get the document root
map path into SCRATCH:DOCROOT from /
# initialize our variables
set SCRATCH:ORIG_URL = %{URL}
set SCRATCH:REQUEST_URI = %{URL}
# see if theres any queries in our URL
match URL into $ with ^(.*)\?(.*)$
if matched then
set SCRATCH:REQUEST_URI = $1
set SCRATCH:QUERY_STRING = $2
endif
RULE_0_END:
RULE_1_START:
# prepare to search for file, rewrite if its not found
set SCRATCH:REQUEST_FILENAME = %{SCRATCH:DOCROOT}
set SCRATCH:REQUEST_FILENAME . %{SCRATCH:REQUEST_URI}
# check to see if the file requested is an actual file or
# a directory with possibly an index. don?EUR(TM)t rewrite if so
look for file at %{SCRATCH:REQUEST_FILENAME}
if not exists then
look for dir at %{SCRATCH:REQUEST_FILENAME}
if not exists then
set URL = /index.php?q=%{SCRATCH:REQUEST_URI}
goto QSA_RULE_START
endif
endif
# if we made it here then its a file or dir and no rewrite
goto END
RULE_1_END:
QSA_RULE_START:
# append the query string if there was one originally
# the same as [QSA,L] for apache
match SCRATCH:ORIG_URL into % with \?(.*)$
if matched then
set URL = %{URL}&%{SCRATCH:QUERY_STRING}
endif
goto END
QSA_RULE_END:
我们的项目需要一个子域名:
我们的托管服务提供商“netregistry.com.au”不基于 Cpanel,这让我们设置子域名变得更加困难。Netregistry 提供了一个教程来指导我们设置子域名。
http://www.netregistry.com.au/support/articles/create-a-subdomain-to-point-to-a-directory
但是,为了使子域名正常工作,我们需要为服务器 Zeus 添加一些重写规则。
我们需要添加以下重写规则:
RULE_1_START:
insensitive match IN:Host into % with ^www.example.com.au
if matched then goto END
RULE_1_END:
RULE_2_START:
insensitive match IN:Host into % with ^(.*).example.com.au
if matched then match URL into $ with ^/(.*)
if not matched then goto RULE_2_END
set URL = /%1/$1
RULE_2_END:
问题是我们已经为 Wordpress 编写了规则 1。如果我们再次放置规则 1,服务器将忽略规则 1。有人知道我们如何组合重写规则吗?
请帮助我们将 WordPress 和子域重写规则结合在一起
答案1
我已经修复了!!我也遇到了这个问题。我刚刚对宙斯规则有了更多的了解,并创建了自己的组合。查看我对根站点中的子域和 wp 的解决方案:
规则 3 开始: 不敏感匹配 IN:Host 到 % 中带有 ^www.myexample.com 如果匹配则转到 RULE_2_END 规则 3 结束: 规则 2 开始: 不敏感匹配 IN:Host 到 % 中带有 ^(.*).myexample.com 如果匹配则将 URL 匹配到 $ 中,并使用 ^/(.*) 如果不匹配则转到 RULE_2_END 设置 URL = /%1/$1 规则2结束: 规则 0 开始: # 获取文档根目录 将路径映射到 SCRATCH:DOCROOT 从 / # 初始化变量 设置 SCRATCH:ORIG_URL = %{URL} 设置 SCRATCH:REQUEST_URI = %{URL} # 查看我们的 URL 中是否有任何查询 使用 ^(.*)\?(.*)$ 将 URL 与 $ 进行匹配 如果匹配则 设置 SCRATCH:REQUEST_URI = $1 设置 SCRATCH:QUERY_STRING = $2 万一 规则 0 结束: 规则 1 开始: # 准备搜索文件,若未找到则重写 设置 SCRATCH:REQUEST_FILENAME = %{SCRATCH:DOCROOT} 设置 SCRATCH:REQUEST_FILENAME . %{SCRATCH:REQUEST_URI} # 检查请求的文件是否是实际文件或 # 可能带有索引的目录。如果是的话,不要重写 在 %{SCRATCH:REQUEST_FILENAME} 查找文件 如果不存在则 在 %{SCRATCH:REQUEST_FILENAME} 处查找目录 如果不存在则 设置 URL = /index.php?q=%{SCRATCH:REQUEST_URI} 转到 QSA_RULE_START 万一 万一 # 如果我们在这里创建了它,那么它就是一个文件或目录,无需重写 转到结束 规则 1 结束: QSA_RULE_START: # 如果原来有查询字符串,则附加该字符串 # 与 Apache 的 [QSA,L] 相同 将 SCRATCH:ORIG_URL 与 % 和 \?(.*)$ 进行匹配 如果匹配则 设置 URL = %{URL}&%{SCRATCH:QUERY_STRING} 万一 转到结束 QSA_规则结束:
规则名称不需要与服务器示例使用相同的名称,只需确保规则具有正确的关系即可。我希望这个解决方案有用。