.htaccess htaccess子域重定向+路径代理(规则链?)?

d6kp6zgx  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(154)

我有一个棘手的问题,据我所见;)
目前,我正在设置一个动态分支发布管道,它已经在管道处理过程中获取了一个分支,并将其部署在我们的测试服务器上的一个保留文件夹(“branches”)中。
当前工作(在分支文件夹中):

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.domain\.com$ [NC]
RewriteRule ^ %1%{REQUEST_URI}/public [L,NC]

但是现在的问题是,例如,一个域my-new-testbranch-123.domain.com得到了到**my-new-testbranch-123.domain.com/my-new-testbranch-123/public/**的重定向。这是在一边的ok(因为输出数据在那里被发现,但我想有一个适当的网址,如应用程序可以正确路由。所以我试图通过代理重写网址。但没有运气。有什么建议吗?
我的目标是使用子域my-new-testbranch-123.domain.com/,而url中没有任何其他路径。文档根目录位于my-new-testbranch-123/public/。
我尝试通过链接,但都没有工作,因为我想-.-:

RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.domain\.com$ [NC]
RewriteRule ^ %1%{REQUEST_URI}/public [NC,N]
RewriteCond %{REQUEST_URI} ([^.]+)/public
RewriteRule ^(.*)$ / [P]

RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.domain\.com$ [NC]
RewriteRule ^ %1%{REQUEST_URI}/public [NC,C]
RewriteCond %{REQUEST_URI} ([^.]+)/public
RewriteRule ^(.*)$ / [P]

(with C和N标志)
最佳,弯曲

hc8w905p

hc8w905p1#

原始规则的问题是public之后没有/,因为这是一个实际的目录,Apache通过mod_dir模块进行301重定向。
您可以使用此规则来修复此问题:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.domain\.com$ [NC]
RewriteRule ^ %1/public%{REQUEST_URI} [L]

确保在新浏览器中测试或通过命令行curl来避免旧浏览器缓存。

相关问题