在htaccess中重定向其他子域

时间:2015-08-06 22:40:11

标签: apache .htaccess mod-rewrite redirect url-redirection

我遇到重定向问题。

我的htaccess文件中有这段代码。

<script>
    myFunc.set('@(myValueFromModel)');
    myFunc();//can be called repeatedly now
</script>

此代码工作正常。此代码将没有www的所有请求重定向到www。

但我的问题是,当我尝试访问属于子域的RewriteCond %{HTTP_HOST} ^frutasadomicilio.cl RewriteRule ^ http://www.frutasadomicilio.cl%{REQUEST_URI} [L,R=301] Redirect 301 /index.html http://www.frutasadomicilio.cl/venta-de-verduras Redirect 301 http://frutasadomicilio.cl http://www.frutasadomicilio.cl/venta-de-verduras 时,我被重定向到resources.frutasadomicilio.cl

1 个答案:

答案 0 :(得分:-1)

我假设您的子域指向主域文档根目录下的子目录(常见设置)?例如。 resources. - &gt; /resources/...

这种情况下的问题是继承了文件系统上父目录的.htaccess文件。因此,resources.example.com请求将导致重定向(Redirect 301 /index.html ...)。

此外,您不应将mod_alias重定向(即。Redirect)与mod_rewrite重定向(即RewriteRule)混合使用。如果你使用的是mod_rewrite,那么只使用mod_rewrite。

  

Redirect 301 http://frutasadomicilio.cl http://www.frutasadomicilio.cl/venta-de-verduras

此行实际上什么都不做,应该删除。 Redirect采用根相对路径(以斜杠开头)作为源路径,而不是绝对路径,因此永远不会匹配。

最后两个Redirect可以重写如下(使用mod_rewrite)以避免不必要的重定向:

RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(index\.html)?$ /venta-de-verduras [R=301,L]

现在,重定向仅在主机启动www.时发生(因此排除resources.)。

或者,您可以省略上述RewriteCond指令,并在/resources子目录中包含.htaccess文件,并带有以下指令。

RewriteEngine On

默认情况下不会继承mod_rewrite指令,因此只需在子目录中启用重写引擎就可以防止执行父.htaccess中的mod_rewrite指令(请注意,仍会处理父.htaccess文件中的其他模块)。如果您需要排除父.htaccess文件中的大量重定向,这可能更为可取。