【问题标题】:Different lighttpd rewrite rules in subirectory子目录中不同的 lighttpd 重写规则
【发布时间】:2012-09-07 04:29:03
【问题描述】:

我在获取特定子目录(不同于 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”,可能会被简化)。

我已经在 Google 上搜索了自己尝试了多种变体(主要是在一些稍微相关的随机论坛帖子的指导下在黑暗中刺痛),但我就是无法理解它。

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

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

【问题讨论】:

    标签: wordpress url-rewriting lighttpd subdirectory


    【解决方案1】:

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

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

    url.rewrite = (
    

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

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

    你将任何包含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"
    )
    

    【讨论】:

    • 感谢您的回复!我已经更新了问题以增加一些清晰度(希望如此)。基本上第一组规则需要应用于 webroot "/",不包括某些目录(根据 "# Exclude..." 之后的行,包括 /subdirectory),然后将第二组规则仅应用于 /subdirectory。非常感谢您的帮助。
    • 相应更新(只需将 subdir 替换为您的实际目录)
    • 这是 1/2 的工作方式,它正在重写页面本身,但没有重写 css 和图像。我尝试在前 2 行中将 /subdir/ 添加到 $0 中,但这似乎不起作用。
    • 您是否正确声明了 css 和图像文件以进行处理?如果您只是遇到样式问题,这是一个常见问题。如果你确实有这些,我有点困惑还剩下什么。我还在上面发现了一个小错误
    • 我已应用更新的规则集,但 css/images/js 仍未加载。声明它们是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多