【问题标题】:Rewriting an url for a user-defined domain重写用户定义域的 url
【发布时间】:2009-08-12 01:09:08
【问题描述】:

我不完全确定这是否可行并尝试搜索,但找不到我当前情况的确切答案。

我正在构建一个服务,它应该允许用户将他们自己的域指向该服务。 (他们需要将 A 记录指向我的服务器 ip)

我可以在 apache 中使用 catch all 来捕获域。所以我在 httpd.conf 中为这个 catch all 做了一个 Vhost 记录。因此,apache 中所有未定义的主机名都指向某个目录。

现在我想将此域作为参数传递给我的服务。那么是否可以使用 .htaccess 将 this.randomdomain.com 指向 www.mywebserviceurl.com/domain/catch/this.randomdomain.com

地址栏应保留 url this.randomdomain.com

编辑:

RewriteEngine On
RewriteRule ^(.*)$ http://example.com/blogs/string/$1 [R=301] 

以上内容正在重定向,但 Firefox 抛出错误“页面未正确重定向 - Firefox 检测到服务器正在以永远不会完成的方式重定向此地址的请求。” 而且地址正在改变,这是我不想要的。

谢谢!

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    从规则中排除该域:

    RewriteCond %{HTTP_HOST} !=example.com
    RewriteRule ^(.*)$ http://example.com/blogs/string/$1 [R=301]
    

    如果你也想要域名:

    RewriteCond %{HTTP_HOST} !=example.com
    RewriteRule ^(.*)$ http://example.com/blogs/string/%{HTTP_HOST}/$1 [R=301]
    

    【讨论】:

    • 谢谢,这行得通,但我怎样才能让它对用户不可见?
    • 您可能会使用代理(需要 mod_proxy)来做到这一点。只需添加 P 标志。
    • 如果我将 [R=301] 更改为 [P] 它会中断重定向,我会得到一个 404 页面未找到。
    • 我可能没有启用 mod_proxy,会检查一下。
    【解决方案2】:

    请看这里:http://www.addedbytes.com/apache/mod_rewrite-cheat-sheet/

    指令 %{HTTP_REFERER} 应该做你想做的事。

    【讨论】:

      【解决方案3】:

      如果您使用 Gumbo 的答案,但更改了大括号中的参数,则可以静默重定向。将[R=301] 更改为[L],这意味着这是将执行的最后一条规则。

      RewriteCond %{HTTP_HOST} !=example.com
      RewriteRule ^(.*)$ http://example.com/blogs/string/$1 [L,P]
      

      编辑:看到 Gumbo 的回答后,您还需要启用 mod_proxy 并添加 P 标志。

      【讨论】:

      • 我已将其更改为 [L] 重定向继续工作,但他并没有默默地这样做。它改变了地址栏。
      • Gumbo 的更新答案应该有效。我已经编辑了我的回复以匹配他的回复。
      猜你喜欢
      • 2014-04-21
      • 2013-05-11
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      相关资源
      最近更新 更多