假设以下结构:
/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/hello
和https://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中起作用?
答案 0 :(得分:0)
听起来你根本不需要bar
目录。将嵌套的CMS上移一级。您需要忽略对主嵌套CMS中嵌套CMS的请求,因此请先放置此规则:
RewriteCond ^another-cms/ - [L]
在嵌套版中,设置
RewriteBase /main-cms/another-cms/
网络根目录中有什么?这就是我期望你的主要CMS的地方。如果它像bar
那样是空的,那就做同样的事情。