我想使用多个子文件夹的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步的例子吗?或者即使它是不可能的,唯一的方法是使用"类别" (app,app2,网站)在所有情况下都在网址中。
感谢任何帮助
答案 0 :(得分:0)
您可以在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]
答案 1 :(得分:0)
您无需检查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
等等。