【问题标题】:Wildcard subdomain mod-rewrite does not work通配符子域 mod-rewrite 不起作用
【发布时间】:2013-10-08 14:27:41
【问题描述】:

我有一个通配符子域 *.domain.com 分配给 public_html/。

我想这样做:

例如,/folder1/index.php 基于状态名称(?state=statename)。

对于/folder1/folder2/index.php,它将基于唯一名称(?name=uniquename)。

所以,www.domain.com/folder1/index.php?state=statename 将是 statename.domain.com

并且 www.domain.com/folder1/folder2/index.php?name=uniquename 将是 uniquename.domain.com

这是我的代码

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+folder1/index\.php\?state=([^\s&]+) [NC]
RewriteRule ^ http://%1.domain.com/? [R=301,L]

RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+folder1/folder2/index\.php\?name=([^\s&]+) [NC]
RewriteRule ^ http://%1.domain.com/? [R=301,L]

问题是它重定向回 public_html 目录。代码有问题吗?

旧代码

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteRule ^$ /index [L]

RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).domain.com$ [NC]
RewriteRule ^(index)/?$ /$1.php?name=%2 [L,NC,QSA]

代码说明:每当用户输入uniquename.domain.com,它会自动转到www.domain.com/index.php?name=uniquename,并且url栏中的uniquename.domain.com不会改变。

新问题的不同之处在于状态目录不同,域为 state1.uniquename.domain.com。 url 栏中的“state1.uniquename.domain.com”也不应该改变。

【问题讨论】:

  • 我记得写过这些规则:P 请解释什么不起作用?我不明白你的意思it redirect back to public_html directory
  • 每当我输入 uniquename.domain.com 时,它都会转到 domain.com(public_html 目录) 而不是 uniquename.domain.com(www.domain.com/folder1/folder2/index.php?name =唯一名称)。谢谢
  • 但是您在浏览器中输入www.domain.com/folder1/folder2/index.php?name=uniquename 对吗?
  • 您是否在这些域中安装了任何 PHP/CMS 框架?

标签: php .htaccess mod-rewrite wildcard-subdomain


【解决方案1】:

根据您的 cmets。确保DOCUMENT_ROOT 对应于www.domain.comstate1.domain.comstate2.domain.compublic_html

试试这个代码:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+folder1/index\.php\?state=([^\s&]+) [NC]
RewriteRule ^ http://%1.domain.com/? [R=301,L]

RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+folder1/folder2/index\.php\?name=([^\s&]+) [NC]
RewriteRule ^ http://%1.domain.com/? [R=301,L]

RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|bmp|png|tiff|css|js)$ [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.([^.]+)\.domain\.com$ [NC]
RewriteRule ^ /state/%1/client/index.php?name=%2&page=%{REQUEST_URI} [L,NC]

【讨论】:

  • 那么,如果我在 url 栏中输入 state1.uniquename.domain.com,会被识别为 www.domain.com/state/state1/index.php?name=uniquename 吗?跨度>
  • 我明白了,如果你想要这样,那么让我编辑它。
  • 但是您希望如何处理http://state1.uniquename.domain.com/something
  • 目前只有一页是index.php。所以它会是state1.uniquename.domain.com/index.php 但是否可以在没有'index.php'的情况下显示网址?
  • 好的,看看编辑。它将使http://state1.uniquename.domain.com/something 变为www.domain.com/state/state1/index.php?name=uniquename&page=/something
猜你喜欢
  • 1970-01-01
  • 2013-01-30
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 2012-07-21
  • 2011-10-28
  • 1970-01-01
相关资源
最近更新 更多