【问题标题】:htaccess for multiple CMSes in nested directorieshtaccess 用于嵌套目录中的多个 CMS
【发布时间】:2017-02-02 01:59:11
【问题描述】:

假设如下结构:

/main-cms/index.php
/main-cms/a-thing.php
/main-cms/foo/index.php
/main-cms/bar/another-cms/index.php
/main-cms/bar/another-cms/another-thing.php

我希望有一个不存在的 URL,例如 https://example.com/main-cms/hello,由主 CMS 的 index.php 文件和正常提供的实际文件处理,例如 https://example.com/main-cms/a-thing.phphttps://example.com/main-cms/foo/

以下 .htaccess 可以正常工作:

RewriteBase /main-cms/
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

我在主目录的子目录中还有另一个 CMS,它有自己的 .htaccess 文件和规则,允许其他 CMS 管理自己的网站部分。对https://example.com/main-cms/bar/another-cms/* 的请求由其他 CMS .htaccess 处理,而不会受到主要的干扰。

现在如何让主 CMS .htaccess(指向 /main-cms/index.php)处理对 https://example.com/main-cms/bar/https://example.com/main-cms/bar/baz 的请求?我得到一个带有上述代码的 404,因为bar 目录存在但/main-cms/bar/ 中没有索引页。删除!-d 条件将中断对/main-cms/foo/ 的请求。

这只能通过/main-cms/bar/ 目录中的第三个 .htaccess 手动重定向来解决,还是有一些条件/规则魔法可以在主 .htaccess 中起作用?

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    听起来您根本不需要bar 目录。将嵌套的 CMS 上移一层。您需要忽略对主内容中嵌套 CMS 的请求,因此请将此规则放在首位:

    RewriteCond ^another-cms/ - [L]
    

    在嵌套中,设置

    RewriteBase /main-cms/another-cms/
    

    网络根目录中有什么?那就是我希望您的主要 CMS 所在的地方。如果它像bar 这样是空的,对它做同样的事情。

    【讨论】:

    • 我的示例过于简化了问题,即将具有多个自助服务应用程序(不同的非传统 CMS)的大型站点迁移到新的 Web CMS 以处理驻留的大部分传统静态内容在其他 CMS 中。移动目录会破坏 20 多年的已建立链接。虽然这当然是可行的,但我更愿意在没有大量重定向网络的情况下维护现有结构。
    猜你喜欢
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多