.htaccess和反向代理中的RewriteRule

时间:2015-07-24 00:33:48

标签: .htaccess mod-rewrite reverse-proxy url-redirection cloudflare

这是我的问题,我几天都在挣扎。

我们有一个域名firstpart.maindomanin.com nad子域名secondpart.maindomain.com。 在第一个域下,项目的第一部分(基于SaaS商务)和第二部分(在secondpart.maindomain.com下) - 基于Symfony。这两部分通过SOAP服务等连接。

对于firstpart.maindoman.com,我们正在使用Cloudflare。 我们有反向代理所以: firstpart.maindomain.com/uk/made指向secondpart.maindomain.com/uk

现在(由于一些不相关的问题,我们无法启用cloudflare secondpart.maindomain.com)我们希望将所有url-s从secondpart.maindomain.com/uk重定向到firstpart.maindomain.com/uk/made 所以例如 secondpart.maindomain.com/uk/furniture到firstpart.maindomain.com/uk/made/furniture secondpart.maindomain.com/uk/sales到firstpart.maindomain.com/uk/made/sales 等等 所以我们需要更改域名并在语言代码和其他网址之间添加“制作”

除此之外,我们需要重定向所有网址 firstpart.maindomain.com/uk/furniture到firstpart.maindomain.com/uk/made/furniture (在语言代码和其余网址之间添加'make')

我们需要在subdomain secondpart.maindomain.com下的htaccess中执行此操作。

我想出了一些东西:

RewriteCond %{HTTP_HOST} secondpart.maindomain.com$ [NC]
RewriteRule ^([a-z]{2,3})(.*)$ http://firstpart.maindomain.com/$1/made$2 [R=301,L]

和url一样 secondpart.maindomain.com/uk/furniture

我正在重定向到

http://firstpart.maindomain.com/uk/made/furniture

这很好,但重定向后有无限循环(所以除了更改网址不起作用)

因为事实证明firstpart.maindomain.com/uk/made和secondpart.maindomain.com/uk的HTTP_HOST是相同的,它是secondpart.maindomain.com所以条件不起作用。 我也出现了像

这样的条件
RewriteCond %{REQUEST_URI} !^made [NC]
RewriteRule ^([a-z]{2,3})(.*)$ http://firstpart.maindomain.com/$1/made$2 [R=301,L]

如果在URI中有“make”字样,则不符合条件,在这种情况下,它与第一条规则中的相同。

我尝试了几种不同的配置,但没有任何工作。

当我用http://htaccess.madewithlove.be/进行测试时,一切都很好,并且没有重定向。

所以我假设在cloudflare上有反向代理的东西。

我不是htaccess的专家,但实际上我尝试了很多解决方案而且没有任何工作。

我真的很感激一些帮助。

P.S。以防万一.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteRule ^([a-z]{2,3})(.*)$ http://vendauat.lauraashley.com/$1/made$2 [R=301,L]

RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]


RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]



RewriteRule .? %{ENV:BASE}/app.php [L]

</IfModule>

1 个答案:

答案 0 :(得分:1)

这个条件:

RewriteCond %{REQUEST_URI} !^made [NC]

将始终得到满足,因为您的正则表达式模式表明:如果请求永远不会启动 made,但%{REQUEST_URI}变量始终以开头/。也许你想要的是这个:

RewriteCond %{REQUEST_URI} !^/[^/]+/made/