【问题标题】:how to create subdomain by .htaccess on rewrite directory如何通过 .htaccess 在重写目录上创建子域
【发布时间】:2014-02-23 00:20:00
【问题描述】:

我用这个 .htaccess 创建了一个子域;它在我的 www.example.com 域上运行良好,但在 www.example.pk 上运行良好。我不明白问题出在哪里。

www.example.com

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} ^([-a-zA-Z0-9]+)\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/?index\.php$ 
RewriteRule ^(.*)/*([0-9]+)*$ index.php?r=list&source=product&product_get=%1&page_page=$1 [NC,QSA,L]

www.example.pk

RewriteCond %{HTTP_HOST} !^www\.example\.pk$ [NC]
RewriteCond %{HTTP_HOST} ^([-a-zA-Z0-9]+)\.example\.pk$ [NC]
RewriteCond %{REQUEST_URI} !^/?index\.php$ 
RewriteRule ^(.*)/*([0-9]+)*$ index.php?r=list&source=product&product_get=%1&page_page=$1 [NC,QSA,L]

我创建了 www.example.com 域,然后创建了带有 cpanel *.example.com 的子域。有没有必要?

【问题讨论】:

  • 服务器是否首先监听子域(vHost 或者它是如何配置的)?
  • 当我在 www.example.pk 域上配置此方法时,此错误会出现“问题加载页面”,但在 www.example.com 域上工作正常;两个域都托管在同一主机上
  • oyu可以给我们真实的域名查询吗?
  • (我问是因为问题显然不是 .htaccess 文件,它们是相同的,不可能一个有效,一个无效。)
  • 你有我的域名或者我们可以聊天吗?

标签: php .htaccess mod-rewrite subdomain


【解决方案1】:

当您使用子域时,您需要正确配置 DNS 以将子域定向到您的服务器。 cpanel 的 subdomain-feature 可能已为您完成此操作,或者它已经包含通配符 cname dns 记录。 DNS 记录通常会被缓存,但我不确定不存在的记录是否也是这种情况。

子域是否已经解析到我的服务器?

首先检查您的子域是否已解析为 ip。打开终端并输入ping yoursubdomain.example.com(显然您需要将其替换为您的实际域)。如果无法解析为ip,则可能是您的DNS记录有问题。如果您需要 here 或其他几个类似的网站,您可以在线进行。

编辑您的 dns

如果您的主机允许您手动编辑 DNS 记录,您需要了解以下内容:

  • 您的 dns 中有 1 条 A 记录。这就是将名称转换为 ip 的方式。
  • 任何子域都使用 CNAME 记录链接到该记录。

您可以添加通配符子域(它将任何(不可)想象的子域转换到您的站点)或特定子域到您的 dns。您可以通过添加

CNAME  (from) *.example.com (to) example.com

TTL(生存时间)是记录可以被其他人缓存多长时间。它最多会花费 TTL 让世界上的每个人都“注意到”您在 dns 记录中所做的更改。 This site 提供了更多相关信息。

.htaccess

我不确定您要重写哪种类型的网址,但您可以更改以下几点:

  • %{REQUEST_URI} 总是以 / 开头。在您的情况下,无需在其后面添加?
  • 为了便于阅读,如果您使用%1-type-of-backreferences,请将相应的条件直接放在其上方,即使事实证明它们不会被没有捕获组的其他条件覆盖。
  • ^(.*)/*([0-9]+)*$ 对我来说没有多大意义。它匹配每个 url,因为(.*) 之后的所有内容都是可选的,并且可以无限次出现。我怀疑这就是你想要的。

RewriteCond %{HTTP_HOST} !^www\.example\.pk$ [NC]
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteCond %{HTTP_HOST} ^([-a-zA-Z0-9]+)\.example\.pk$ [NC]
RewriteRule ^(.*)/*([0-9]+)*$ index.php?r=list&source=product&product_get=%1&page_page=$1 [NC,QSA,L]

【讨论】:

  • 感谢您的回答;我不会做通配符子域;我想使用 .htaccess 我已经在我的 www.mydomain.com 上完成了,但是当我尝试在 www.mydomain.pk 上申请时它不起作用;我不知道问题出在哪里。你有什么解决办法吗?
  • 您是否按照“子域是否已解析到我的服务器?”下的文字进行操作?结果如何?
  • 请不要对我们大喊大叫。正如我已经告诉过你的,.htaccess 文件显然不是问题所在。您不能仅使用 .htaccess 实现子域,您也总是需要 DNS 条目(您需要 DNS 条目和服务器端配置)。 DNS是必要的,以便计算机知道要向哪个服务器请求内容,服务器配置是必要的,以告诉服务器它负责该域。
  • @user3340947 假设您有一台平板电脑 (DNS),如果您在没有它的情况下走出家门,就会迷失方向。您的平板电脑会准确告诉您如何从您的房子导航到给定位置。你问你的平板电脑:“给我指路到 Googlestreet 1”。它会告诉你你要去哪里。在 Googlestreet 1(服务器),工作人员将带您进一步参观。回到家,你对“MySubdomain 1”尝试同样的事情。然而,平板电脑说:“我不知道这个地址”。我相信 MySubdomain 1 的工作人员会很乐意为您提供进一步帮助,但您无法到达那里!
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多