我的目标:
http://www.domain.tld必须为每个网址http://www.domain.tld/www/frontend/web提供服务 和 每个网址http://www.domain.tld/backend必须由http://www.domain.tld/www/backend/web
提供服务<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^/backend
RewriteRule ^backend(.*)$ /www/backend/web/$1 [L]
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ /www/frontend/web/$1 [L]
</IfModule>
第一个目标是好的,但第二个目标是
服务器将我/后端重定向到/ www / frontend / web / backend /.
我使用an htaccess tester online测试了它,它给了我相同的结果。
对于精度,即使我使用[L],也会忽略第一个重写规则,或者至少不会停止执行。
答案 0 :(得分:2)
您需要从第二条规则中排除重写的后端URI:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^backend/(.*)$ www/backend/web/$1 [L,NC]
RewriteCond %{REQUEST_URI} !^/(public|www/(backend|frontend)/) [NC]
RewriteRule ^(.*)$ www/frontend/web/$1 [L]
</IfModule>
答案 1 :(得分:0)
原来是一个奇怪的服务器配置。经过几乎所有其他检查SSL的方法,包括但不限于:
RewriteCond %{SERVER_PORT} !=443
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{SERVER_PORT} !=443
唯一一个在客户主机上工作的是:
RewriteCond %{ENV:HTTPS} !=on
感谢@anubhava指出我正确的方向。希望这可以挽救其他人浪费半天的生命。