【问题标题】:htaccess get domain name from %{HTTP_HOST} into variable, minus the wwwhtaccess 从 %{HTTP_HOST} 获取域名到变量中,减去 www
【发布时间】:2013-04-16 00:51:58
【问题描述】:

我目前在 htaccess 文件中有以下内容,如果根目录中不存在该文件,该文件会将某些请求重定向到所请求域的单个文件夹..

RewriteRule ^contact/?$ ASSETS/%{HTTP_HOST}/contact.php

RewriteCond %{REQUEST_URI} !^/ASSETS/%{HTTP_HOST}/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /ASSETS/%{HTTP_HOST}/$1
RewriteCond %{HTTP_HOST} ^(www.)?%{HTTP_HOST}$
RewriteRule ^(/)?$ ASSETS/%{HTTP_HOST}/index.php [L]

当我的域文件夹命名为 /ASSETS/www.domain1.com、/ASSETS/www.domain2.com 等时,这很好用

但是,我已经构建了很多代码,假设文件夹将被标记为 /ASSETS/domain1.com 等(域名,减去 www。)

我在想有一种方法可以将域名从 %{HTTP_HOST} 获取到一个新变量中并去掉 www。部分(如 str_replace 或其他东西),但我找到的所有答案都是围绕基本重定向全部到 www。或没有 www。这是行不通的,因为我仍然希望用户从强制 www 访问该站点。版本。

我以前使用 RewriteCond %{HTTP_HOST} ^(www.)?domain1.com$ 为每个域单独运行规则,但现在有这么多域,对每个域都执行此操作是不可行的。

希望您能提供帮助!提前致谢。

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    您可以使用RewriteCond 捕获所需的主机部分,并将其用作%1RewriteRule

    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
    RewriteRule ^$ ASSETS/%1/index.php [L]
    

    文件系统级别的替代解决方案(没有 htaccess)可能是符号链接。与其提取必要的主机部分,不如使用指向真实目录的符号链接,例如

    - ASSETS -+-domain1.com (directory)
              |
              +-www.domain1.com -> domain1.com (symbolic link)
              |
              +-domain2.com (directory)
              |
              +-www.domain2.com -> domain2.com (symbolic link)
    

    要说明不同的反向引用,请参见另一个示例

    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
    RewriteRule ^foo/(.+)$ $1/%1/index.php [L]
    
    • 这里有一个$1,它从RewriteRule 模式foo/(.+) 中获取捕获组。
    • 我们有一个%1,它从前一个RewriteCond (?:www\.)?(.+) 中获取捕获组。
      请注意,(?:...) 是一个 non-capturing 组。这就是我们使用%1 而不是%2 的原因。

    【讨论】:

    • 这让我到了我需要的地方,正则表达式需要一些调整,但概念是正确的。有效的正则表达式是 RewriteCond %{HTTP_HOST} ^(?:www\.)?( [a-z0-9-]+\.[az]+) [NC]
    • 只是为了澄清我最初错过的一些事情:RewriteRule 中的正则表达式反向引用像往常一样使用“%”而不是“$”,因为“%1”指的是第一个捕获组在 RewriteCond 中。谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 2023-04-05
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多