.htaccess基于URL的多个子文件夹重定向


.htaccess multi subfolder redirection based on URL

我想使用多个子文件夹的httaccess将请求重定向到相应的文件。

例如(目标):

1) www.mysite.com->/var/www/mysite/website/index.php

2) www.mysite.com/app->/var/www/mysite/app/web/index.php

3) www.mysite.com/app2->/var/www/mysite/app2/web/index.php

使用以下代码,我可以实现步骤2,例如:

RewriteCond %{REQUEST_URI} ^/app/
RewriteCond %{HTTP_HOST} ^(www'.)?mysite'.
RewriteRule ^(.*)$ ../app/web/$1 [L]

但如果我加上例如。。

RewriteCond %{REQUEST_URI} !^/website/
RewriteCond %{HTTP_HOST} ^(www'.)?mysite'.
RewriteRule ^(.*)$ /website/$1 [L]

1) 效果很好,但2)停止工作。。。显然,第二段代码覆盖了第一段。。但我不知道该怎么处理。

如果有一个容易理解和/或容易实现的答案,特别是关于这个目标,我没有找到

有人能分享一个如何一起实现步骤1和步骤2的例子吗?或者,即使它是不可能的,唯一的方法是在所有情况下使用url中的"类别"(应用程序、应用程序2、网站)。

任何帮助都要感谢

您不需要检查HTTP_HOST,因为所有请求都将匹配。您也不需要检查REQUEST_URI,因为您可以在RewriteRule的模式部分中进行检查。对于其余部分,您可以使用简单、特定的规则

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app2 /app2/web/index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app /app/web/index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /website/index.php [L]

你必须注意规则的顺序。如果app是第一个,那么它也将匹配app2。这些规则假定文档根位于/var/www/mysite中。如果它在/var/www中,则必须在替换前加上/mysite,例如/mysite/app2/web/index.php等。

您可以在DOCUMENT_ROOT/.htaccess文件中使用以下代码:

DirectoryIndex index.php
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
RewriteRule ^/?$ website/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)(/.*)?$ /$1/web$2 [L]