htaccess从%{HTTP_HOST}获取域名到变量,减去www

Sam*_*ian 5 .htaccess mod-rewrite

我目前在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]
Run Code Online (Sandbox Code Playgroud)

当我的域文件夹命名为/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 $单独运行每个域的规则,但现在有很多域,为每个域执行它是不可行的.

希望你能帮忙!提前致谢.

Ola*_*che 11

您可以使用捕捉所需要的主机部分RewriteCond,并把它作为%1RewriteRule

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

  • 这让我到了我需要的地方,正则表达式需要一些调整但是概念是正确的..有效的正则表达式是RewriteCond%{HTTP_HOST} ^(?:www \.)?([a-z0-9-] + \.[az] +)[NC] (2认同)