.htaccess重写特定的子文件夹

时间:2015-01-30 15:05:39

标签: apache .htaccess mod-rewrite

我的目标:

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],也会忽略第一个重写规则,或者至少不会停止执行。

2 个答案:

答案 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指出我正确的方向。希望这可以挽救其他人浪费半天的生命。