HTACCESS:如何URL重写子子域?

时间:2015-07-02 13:33:08

标签: .htaccess url-rewriting

我的子域名apps.domain.com指向domain.com/apps

我想重写网址appName.apps.domain.com,其中appName是指向domain.com/apps/appName的变量

  • 我正在寻找内部转发(浏览器的网址没有变化)

我的.htaccess文件中应该包含哪些内容以及应该在哪里保存?在/apps/文件夹中?或者在root文件夹中?

最后,如果无法使用.htaccess文件,我该怎么办呢?我使用Linux godaddy服务器作为主机。

**** 问题已更新07/08/2018;添加了更多详细信息 ****

  • 我正在使用GoDaddy SHARED托管
  • 目前正在托管多个域名
  • 因此,目录结构为public_html/domain.com/,其中/domain.com/是托管域名的名称
  • 子子域仅限于1个特定域

示例:

  • 如果域名为domain.com
  • 有多个名字,但举个例子。如果应用名称为awesome
  • 如果uri是:awesome.apps.domain.com将指向... public_html/domain.com/apps/awesome/
  • 如果uri是:ubertz.apps.domain.com将指向... public_html/domain.com/apps/ubertz/
  • 依旧......

3 个答案:

答案 0 :(得分:4)

创建通配符子域

您需要做的第一件事是创建一个通配符 *。apps.domain.com 子子域。

  1. (如果您使用的是名称服务器,请跳过此步骤!)登录您的域名注册商,为创建 A记录 * .apps.domain.com (是的,这是星号)并将其指向服务器IP地址。请注意,DNS最多可能需要48小时才能传播。

  2. 登录您的网络托管帐户,然后转到部分下的'子域名'菜单。创建一个子域 *。apps.domain.com ,指向“/ public_html / domain.com / apps”文件夹,因为它的文档根目录。等到传播结束。

  3. 访问How to create wildcard subdomain in cPanelHow to Create a Sub-Subdomain了解详情。如果您的服务器配置不允许您创建通配符子子域,则只需创建 * .domain.com 并将其指向“/ public_html / domain.com / apps”

    重写通配符子域

    将这些指令放在通配符 *。apps.domain.com 的文档根目录的 .htaccess 文件中,在本例中为“/ public_html /domain.com/apps“

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(.+)\.apps\.domain\.com
    RewriteRule (.*) http://domain.com/apps/%1/$1 [QSA,P,L]
    

    %1(.+)的编号反向引用,$1(.*)。如果您从特定域 http:// domain.com/apps/%1/$1 进行URL重写,则需要包含[P]标记服务器,没有它将被重定向。如果您要使用重写的通配符子域的查询字符串,请使用[QSA]标志。有关这些内容的详情,请访问P|proxyQSA|qsappend。如果我忘了某些东西,只是调整一些调整,除此之外,是服务器的错误。

    很少有事情需要考虑

    您必须为将要存在的重复子域配置 .htaccess 文件,例如 otherwildcard.apps.domain.com 另一个。 wilcard.apps.domain.com other.deep.level.apps.domain.com 将复制 apps.domain.com ,因为它们是都具有相同的文档根。配置为重定向或告知客户端这些子域不存在。

答案 1 :(得分:3)

我使用此代码进行子域名转发:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.apps\.domain\.com$
RewriteRule (.*) /apps/%1/$1

说明:

  • RewriteCond中,您使用正则表达式(.*)捕获应用名称 - 它将保存到变量%1
  • RewriteRule中,您将所有内容(另一个(.*)表达式,其内容将保存在变量$1中)转发到目录/apps/<appName>/<path after URL>

有关正则表达式的更多信息,建议您查看本教程:http://www.webforgers.net/mod-rewrite/mod-rewrite-syntax.php

您应该将.htaccess保存在域的root目录中,例如public_html/domain.com/。如果它不起作用,请将其放在apps文件夹中。

答案 2 :(得分:2)

试试这些 .htaccess 指令:

markers.on('clustermouseover', function (e) {
    console.log(e.latlng);
}

由于[P]标志,RewriteRule不会重定向用户。这会将请求重定向到处理请求的RewriteEngine on RewriteCond %{REQUEST_URI} ^(.*)\.apps\.domain\.com$ RewriteRule (.*) /apps/appName/$1 [P,L] 模块并返回结果。

有关详细信息,请参阅http://httpd.apache.org/docs/2.4/mod/mod_proxy.html

相关问题