.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 为我指明了正确的方向。希望这会避免其他人浪费半天的生命。
我的目标:
每 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 为我指明了正确的方向。希望这会避免其他人浪费半天的生命。