将子文件夹请求重定向到 Passenger

Redirect subfolder request to Passenger

我想将 mysite.com/subfolder/... 等所有请求重定向到 Passenger 上的 Django 应用程序,并将所有其他请求重定向到网站 运行 下的某些 php cms。

文件结构:

根内容.htaccess

RewriteEngine on

... RewriteConds and RewriteRules generated by php cms

subfolder/.htaccess的内容:

PassengerAppRoot "/home/username/djangoapplication"
PassengerPython "/home/username/virtualenv/webapp/2.7/bin/python2.7"

问题是关于 root .htaccess 的。当 root .htaccess 为空(仅包含 RewriteEngine on)时,mysite.com/subfolder/... 等请求由 subfolder/.htaccess 和 Django 应用程序加载处理。但是当 root .htaccess 包含由 php cms 生成的行时,所有像 mysite.com/subfolder/... 这样的请求都会导致 cms.

的 404 错误页面

所以我想在来自 cms 的 RewriteRules 将其替换为 404 错误页面之前过滤 mysite.com/subfolder/...subfolder/.htaccess 之类的请求,但我不知道如何做吧。

如果根 .htaccess 文件仅包含 mod_rewrite 指令,那么您只需在 /subfolder/.htaccess 中启用重写引擎即可完全覆盖根 .htaccess 文件。

例如:

RewriteEngine On    

PassengerAppRoot "/home/username/djangoapplication"
PassengerPython "/home/username/virtualenv/webapp/2.7/bin/python2.7"

默认情况下,mod_rewrite 指令 不会 默认继承(与其他模块不同)。但是,可能 mod_rewrite 继承已在您的服务器配置中专门启用,因此这可能不起作用。

如果这不起作用,那么您需要在根 .htaccess 文件的顶部创建一个例外,以防止对 /subfolder/ 的请求被覆盖。例如:

RewriteRule ^subfolder - [L]

当 URL 以 /subfolder 开头时,这将停止根 .htaccess 文件中的任何进一步处理。