我有一个运行多个项目的Web服务器。我已经为他们分配了一些域名:
然后,我在每个项目的文件夹上创建了,所以我有以下结构:
我想重写网址,所以当从任何域访问我的服务器时,我会执行以下操作:
HTTP_HOST
的域(或第一个子域,如果有的话),请将整个域重写为/projects/<PROJECT_NAME>
请注意,我不希望每个域(我当前的配置)都有一次重写,只需要一次通用重写。
答案 0 :(得分:1)
这应该这样做:
RewriteCond %{ENV:PROJECT_PREPENDED} !=1
RewriteCond %{ENV:REDIRECT_STATUS} !^30
RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteCond /var/www/projects/%1 -d
RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteRule ^ projects/%1%{REQUEST_URI} [E=PROJECT_PREPENDED:1]
但我不喜欢这种做法。为什么不将项目文件夹命名为完整主机名?如清单所示。它更灵活,适合将来使用。无论如何,上面会按你指定的方式进行。
如果将项目目录命名为完整主机名,则简化为:
RewriteCond %{ENV:PROJECT_PREPENDED} !=1
RewriteCond %{ENV:REDIRECT_STATUS} !^30
RewriteCond /var/www/projects/%{HTTP_HOST} -d
RewriteRule ^ projects/%{HTTP_HOST}%{REQUEST_URI} [E=PROJECT_PREPENDED:1]
如果您想在两个域上使用相同的子域,或者在同一个域中使用两个不同的TLD,或者在另一个域中使用与该域名相同的子域,则不会让您陷入混乱。