htaccess 将所有请求重定向到 index.php,子文件夹除外

Posted

技术标签:

【中文标题】htaccess 将所有请求重定向到 index.php,子文件夹除外【英文标题】:htaccess redirect all requestes to index.php except sub folder 【发布时间】:2012-12-07 11:49:06 【问题描述】:

我在域的根目录安装了一个 CMS,并使用以下 htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

这会处理友好的 url 以将所有内容重定向到 index.php。我的问题是我有一个包含另一个 cms 的子文件夹。我需要将子文件夹的请求重定向到正确的文件夹而不是 index.php。

我尝试了以下方法,但似乎不起作用

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteCond $1 !^(sub-folder)
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

谁能帮忙?

谢谢

【问题讨论】:

【参考方案1】:

您应该正确验证请求 uri 是否与子文件夹匹配

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_URI !/subfolder
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

无论如何,前两个rewritecond的意思是:如果请求文件名不是文件或目录。这意味着如果您引用的文件在子文件夹中并且子文件夹在您的 docroot 中,则您无需执行任何操作。

如果仍然无法正常工作,启用日志可以帮助您:

RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

在生产环境中避免这种登录

对 Level 使用较高的值会显着降低 Apache 服务器的速度!使用级别大于 2 的重写日志文件仅用于调试!

【讨论】:

以上是关于htaccess 将所有请求重定向到 index.php,子文件夹除外的主要内容,如果未能解决你的问题,请参考以下文章

将所有 http 请求重定向到 https 并将 index.php 附加到它

PHP .htaccess重定向

htaccess:将所有请求重定向到不同的域(不带查询参数)

htaccess - 将所有文件重写为 index.php,除了 sitemap.xml

Web.config 将所有路径重定向到 index.php - 不起作用

.htaccess 将文件夹重定向到 url