嵌套目录中

时间:2017-02-02 01:59:12

标签: .htaccess mod-rewrite

假设以下结构:

/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

我希望主要CMS的index.php文件和正常提供的实际文件(例如https://example.com/main-cms/hellohttps://example.com/main-cms/a-thing.php)处理https://example.com/main-cms/foo/等不存在的网址。 / p>

以下.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处理而不会受到主要干扰。

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

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

1 个答案:

答案 0 :(得分:0)

听起来你根本不需要bar目录。将嵌套的CMS上移一级。您需要忽略对主嵌套CMS中嵌套CMS的请求,因此请先放置此规则:

RewriteCond ^another-cms/ - [L]

在嵌套版中,设置

RewriteBase /main-cms/another-cms/

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