【问题标题】:WSGI .htaccess with addon domain带有插件域的 WSGI .htaccess
【发布时间】:2013-08-10 19:12:51
【问题描述】:

我有一个运行 wsgi 应用程序的子文件夹。我还有一个指向该子文件夹的插件域。我无法在子文件夹中设置 .htaccess 文件。

我当前的文件结构:

public_html/
  .htaccess
  irrelevant index.html
  some other irrelevant stuff
  sub_folder/
    .htaccess
    app.wsgi

我有一个指向 /public_html/ 的 maindomain.com 和一个指向 /sub_folder/ 的 addondomain.com。 目前根文件夹中的.htaccess文件为空,sub_folder中的文件为:

RewriteEngine On
RewriteBase /
RewriteRule ^(app\.wsgi/.*)$ - [L]
RewriteRule ^(.*)$ app.wsgi/$1 [QSA,L]

如果我访问 addondomain.com,这可以工作,但是当我访问 maindomain.com/sub_folder 时会出现 404。日志显示它随后查找 /public_html/app.wsgi,而不是 /public_html/sub_folder/app.wsgi。如何重写 .htaccess 以使其在两种情况下都能正常工作?

【问题讨论】:

    标签: .htaccess url mod-rewrite subdomain wsgi


    【解决方案1】:

    这也应该适用于附加域。

    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^(app\.wsgi/.*)$ - [L]
    
    RewriteCond %{HTTP_HOST} ^maindomain.com$ [NC]
    RewriteRule ^sub_folder/(.*)$ sub_folder/app.wsgi/$1 [NC,QSA,L]
    
    RewriteCond %{HTTP_HOST} ^addondomain.com$ [NC]
    RewriteRule ^(sub_folder/)?(.*)$ app.wsgi/$1 [NC,QSA,L]
    

    编辑

    上述规则需要调整,因为 OP 的 .htaccess 已经在 /sub_folder 内。如果有人希望他们的根 /.htaccess 处于主导地位,上述方法仍然有效。

    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^(app\.wsgi/.*)$ - [L]
    
    RewriteCond %{HTTP_HOST} ^maindomain.com$ [NC]
    RewriteRule ^(.*)$ sub_folder/app.wsgi/$1 [NC,QSA,L]
    
    RewriteCond %{HTTP_HOST} ^addondomain.com$ [NC]
    RewriteRule ^(.*)$ app.wsgi/$1 [NC,QSA,L]
    

    【讨论】:

    • 使用此 RewriteCond,它不适用于 maindomain.com/sub_folder,因为在这种情况下,不会重定向到 app.wsgi。我试图以此作为开始自己回答它,但它还没有完全起作用。请看我自己的回答。 (我还在犹豫是否应该将其作为编辑或答案在这里很好。)
    【解决方案2】:

    我成功了,有点……

    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^(app\.wsgi/.*)$ - [L]
    
    RewriteCond %{REQUEST_URI} ^/sub_folder [NC]
    RewriteRule ^(.*)$ sub_folder/app.wsgi/$1 [QSA,L]
    
    RewriteCond %{REQUEST_URI} !^/sub_folder[NC]
    RewriteRule ^(.*)$ app.wsgi/$1 [QSA,L]
    

    @Ravi 的答案适用于 addondomain.com,但不适用于 maindomain.com/sub_folder,因为在这种情况下会显示索引,因为它没有重定向到 app.wsgi。

    为了解决这个问题,我添加了第二个 RewriteCond 和 RewriteRule。现在的问题是,当您访问 addondomain.com/sub_folder 时它不起作用(尽管 不应该 发生)。因此,如果有更好的答案也可以正确处理,请赐教。否则我只希望这种情况不会发生。

    编辑:

    这行得通:

    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^(app\.wsgi/.*)$ - [L]
    
    RewriteCond %{HTTP_HOST} ^maindomain.com$ [NC]
    RewriteRule ^(.*)$ sub_folder/app.wsgi/$1 [NC,QSA,L]
    
    RewriteCond %{HTTP_HOST} ^addondomain.com$ [NC]
    RewriteRule ^(.*)$ app.wsgi/$1 [NC,QSA,L]
    

    Ravi 的确切代码不起作用,因为这个 .htaccess 在 sub_folder 中,所以 ^(.*)$ 部分只是 sub_folder/ 之后的东西,不知何故。但是像这样修改它可以工作。感谢您的帮助。

    【讨论】:

    • 这不是将 maindomain/sub 重定向到 maindomain/sub/wsgi/sub 吗?无论如何,我也添加了一个更新来帮助处理附加域。
    • 不知何故它没有...但是我根据您的更新对其进行了更新,现在它可以完美运行了!
    • 很高兴为您提供帮助。如果我的回答帮助您解决了问题,请考虑接受。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-10-19
    • 2015-07-12
    • 1970-01-01
    • 2014-07-05
    • 2011-05-31
    • 2013-07-11
    • 2014-10-24
    • 2014-09-24
    相关资源
    最近更新 更多