【问题标题】:htaccess subdomain rewrite keep wwwhtaccess 子域重写保持 www
【发布时间】:2012-08-10 19:55:53
【问题描述】:

我已在本地设置通配符域以在 .dev 上进行测试

我正在尝试重写以下网址:

http://location.domain.dev/

http://www.domain.dev/site/location

我希望子域中带有 www 的任何请求始终转到 www.domain.dev 但如果对 location.domain.dev 提出任何请求,我希望将该请求保留在地址栏中(即我不希望人们看到潜在的变化)

我的 .htaccess 中目前有以下内容

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On

  RewriteBase /

  RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.dev
  RewriteRule ^(.*)$ http://domain.dev/site/%1 [QSA,NC]

  # Removes index.php
  RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ /index.php?/$1 [L]
</IfModule>

这甚至可能吗?

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    你已经很接近了。为了不重定向浏览器(导致地址栏发生变化),您需要摆脱重写规则目标的http://domain.dev 部分:

    RewriteRule ^(.*)$ /site/%1/$1 [QSA,NC]
    

    假设 *.domain.devwww.domain.dev 具有相同的文档根目录。如果它们不同,您可能必须启用 mod_proxy 并添加 P 标志,以便请求被代理而不是重定向浏览器:

    RewriteRule ^(.*)$ http://domain.dev/site/%1/$1 [QSA,NC,P]
    

    【讨论】:

    • 谢谢 Jon,如何启用 mod_proxy?我可以通过 .htaccess 做到这一点吗?我已经在你的代码中添加了,但是,重定向后我似乎没有去正确的地方。
    • @HerbageOnion 如果它尚未打开,它已通过服务器配置(LoadModule)打开。重定向后没有去正确的地方是什么意思?尝试将/$1 添加到目标的末尾。
    • 好的,我刚刚检查了 httpd.cong 并启用了 mod_proxy。我使用了您的第二条规则,现在它正在工作。最后一个问题是如果我访问domain.dev(带有www)它会尝试访问domain.dev/location/www,我该如何阻止重写这样做?
    • @HerbageOnion 在其他重写条件上方添加RewriteCond %{HTTP_HOST} !^www\. [NC]
    • 啊!我在下面做! :) 太棒了,最后一个问题,我如何将非 www 或空子域重定向到 www?
    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 2015-07-29
    • 2016-12-18
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2014-06-27
    相关资源
    最近更新 更多