【问题标题】:Redirect subfolder request to Passenger将子文件夹请求重定向到乘客
【发布时间】:2019-04-02 07:24:08
【问题描述】:

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

文件结构:

  • .htaccess
  • 子文件夹/
    • .htaccess
  • 一些 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。当根.htaccess 为空(仅包含RewriteEngine on)时,mysite.com/subfolder/... 之类的请求由subfolder/.htaccess 处理,Django 应用程序加载。但是当 root .htaccess 包含 php cms 生成的行时,所有像 mysite.com/subfolder/... 这样的请求都会导致来自 cms 的 404 错误页面。

所以我想在来自 cms 的 RewriteRules 之前过滤像 mysite.com/subfolder/...subfolder/.htaccess 这样的请求,将其替换为 404 错误页面,但我不知道该怎么做。

【问题讨论】:

    标签: django apache .htaccess mod-rewrite passenger


    【解决方案1】:

    如果根 .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 文件的任何进一步处理。

    【讨论】:

    • 谢谢! mod_rewrite 一直是外星人为我写的黑匣子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2012-10-03
    • 2017-03-06
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2015-05-30
    相关资源
    最近更新 更多