mod_rewrite - 检查现有文件和目录

mod_rewrite - check for existing files and directories

我有 2 个域名,foo.combar.com,在 bar.com 的根目录下有一个 .htaccess 文件,要求对 bar.com 的所有请求进行重定向到 foo.com 除了目录索引文件的初始搜索外,它指向 foo.com.

处的特定 php 文件 (functions.php)

这意味着对 bar.comwww.bar.com 的请求将看到 foo.com/functions.php 被访问,并且对图像、样式表等的各种请求继续访问 [= 的重写相对路径23=] 而不是 foo.com/function.phpimages/image.jpg一切正常

现在,问题来了。

我想在 bar.com 上包含一个不重定向的子目录。就像这样,对 bar.com/newdirectory/ 的请求会转到该目录,所有相关文件请求都将正常运行,同时保持原始规则(如上所述)供任何在根目录下访问 bar.com 的人使用。目前,如果我尝试访问新的子目录,我会收到 404。

在我原来的 .htaccess 文件中,我包含了一个用于检查文件是否不存在的松散代码。我尝试添加标志 !-d 以首先检查目录是否不存在,但这导致对 bar.com 的请求直接进入 foo.com 而不是 foo.com/functions.php

当前.htaccess文件:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# Check the request isn't an existing file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^$ http://www.foo.com/functions.php [P]
RewriteCond %{REQUEST_FILENAME} !^$ [NC]
RewriteRule ^(.*) http://www.foo.com/ [P]

您可以在RewriteBase /之后添加:

RewriteRule ^newdirectory/? - [L]

还有其他人。无需测试文件,因为您仅重定向空 URI。
您可以使用:

RewriteRule ^$ http://www.foo.com/functions.php [P]
RewriteRule ^(.+) http://www.foo.com/ [P]

所有 .htaccess:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule ^newdirectory/? - [L]

RewriteRule ^$ http://www.foo.com/functions.php [P]
RewriteRule ^(.+) http://www.foo.com/ [P]