我想使用多个子文件夹的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]