4

我在获取特定子目录(不同于 webroot)的重写规则时遇到了一些问题,我不知道将它们放在哪里。

/var/www/(包含 WordPress 的 webroot) /var/www/subdirectory(包含需要它自己的重写规则的其他应用程序)

以下规则适用于位于 webroot 目录(/var/www 或http://mywebsite.com)中的 WordPress:

$HTTP["host"] =~ "mywebsite.com" {
  url.rewrite-final = (

    # Exclude some directories from rewriting
    "^/(wp-admin|wp-includes|wp-content|gallery2)/(.*)" => "$0",

    # Exclude .php files at root from rewriting
    "^/(.*.php)" => "$0",

    # Handle permalinks and feeds
    "^/(.*)$" => "/index.php/$1"
  )
}

然后我有第二个应用程序,它位于 webroot 的子目录(/var/www/subdirectory 或http://mywebsite.com/subdirectory)中,具有以下规则:

url.rewrite = (
    "(index.php|test.php|favicon.ico)" => "/$1",
    "(css|files|img|js)/(.*)" => "/$1/$2",
    "^([^\?]*)(\?(.+))?$" => "/index.php?url=$1&$3",
)

我需要的是上面的第一组重写规则适用于除上面#Excluded 规则中的其他目录(以及/subdirectory)之外的所有内容,然后第二组规则仅适用于/subdirectory

我从网上某处的博客中获得了第一组 WordPress 规则,任何可能都不完全是我所需要的(关于匹配“mywebsite.com”,可能会被简化)。

我已经用谷歌搜索了自己尝试多种变体(主要是在黑暗中由稍微相关的随机论坛帖子引导),但我就是无法理解它。

那么,在维护根目录的 Wordpress 规则的同时,我将如何将第二组规则应用于子目录?

注意:我无法访问子域(这太容易了)。

4

1 回答 1

2

我不太确定您想表达什么 - 我将解释您当前的规则集是做什么的。

不要使用这个,用户重写一次

url.rewrite = (

您将任何 index.php 和 test.php(甚至 foo-test.php)映射回 webroot

"(index.php|test.php|favicon.ico)" => "/$1",

您将其 url 中包含 css、files、tmp 或 js 的任何子文件夹或文件重写回 webroot

"(css|files|img|js)/(.*)" => "/$1/$2",

现在这匹配您的 webroot 中的任何内容(没有子目录!)并保持获取请求

"^([^\?]*)(\?(.+))?$" => "/index.php?url=$1&$3",
)

更新 这应该可以(未经测试)

url.rewrite-once = (
"^/subdir/(?:index.php|test.php|favicon.ico)" => "$0",
"^/subdir/(?:.+/)?(css|files|img|js)/(.*)" => "/subdir/$1/$2", #update #2
"^/subdir/(?:/(?:.+/))?([^\?]*)(?:\?(.+))?$" => "/subdir/index.php?url=$1&$2",

"^/(wp-admin|wp-includes|wp-content|gallery2)/(.*)" => "$0",
"^/(.*.php)" => "$0",
"^/(.*)$" => "/index.php/$1"
)
于 2012-09-17T20:24:02.050 回答