1

我有一个运行 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 以使其在两种情况下都能正常工作?

4

2 回答 2

1

我让它工作了,有点...

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/ 之后的东西,不知何故。但是像这样修改它可以工作。谢谢您的帮助。

于 2013-08-08T23:21:24.723 回答
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]
于 2013-08-08T22:25:04.180 回答