.htaccess 重写特定子文件夹

.htaccess rewrite for a specific subfolder

我的目标:

每 url http://www.domain.tld must be served by http://www.domain.tld/www/frontend/web 和 每个 url http://www.domain.tld/backend must be server by http://www.domain.tld/www/backend/web

<IfModule mod_rewrite.c> 
    RewriteEngine on

    RewriteBase /

    RewriteCond %{REQUEST_URI} ^/backend
    RewriteRule ^backend(.*)$    /www/backend/web/ [L]

    RewriteCond %{REQUEST_URI} !^public
    RewriteRule ^(.*)$      /www/frontend/web/ [L]

</IfModule>

第一球还行,第二球不行

服务器将我的 /backend 重定向到 /www/frontend/web/backend/.

我什至使用 an htaccess tester online 对其进行了测试,结果相同。

为了精确,即使我使用了 [L],第一个重写规则也会被忽略,或者至少不会停止执行。

您需要从第二条规则中排除重写的后端 URI:

<IfModule mod_rewrite.c> 
    RewriteEngine on
    RewriteBase /

    RewriteRule ^backend/(.*)$ www/backend/web/ [L,NC]

    RewriteCond %{REQUEST_URI} !^/(public|www/(backend|frontend)/) [NC]
    RewriteRule ^(.*)$ www/frontend/web/ [L]    
</IfModule>

原来是一个奇怪的服务器配置。在经历了几乎所有其他检查 SSL 的方法之后,包括但不限于:

RewriteCond %{SERVER_PORT} !=443
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{SERVER_PORT} !=443

唯一在客户端主机上工作的是:

RewriteCond %{ENV:HTTPS} !=on 

感谢@anubhava 为我指明了正确的方向。希望这会避免其他人浪费半天的生命。