在Apache RewriteRule中提取部分服务器名称

时间:2016-01-26 09:13:46

标签: regex apache .htaccess mod-rewrite

我们假设文件系统中有一个文件,如下所示:

/documentroot/domains/foo/files/resource.html

我想编写规则,以便http://foo.example.com/resource.html为文件/domains/foo/files/resource.html提供服务。但是,如果请求网址为http://bar.example.com/resource.html,则应该在/domains/bar/files/resource.html内查看。到目前为止我所做的就是这个,它可以正常工作:

RewriteEngine On

RewriteCond "%{DOCUMENT_ROOT}/domains/foo/%{REQUEST_URI}" -f
RewriteRule ^ domains/foo/%{REQUEST_URI} [QSA,L]

对于任何域名,我如何概括这一点?我正在考虑将正则表达式应用于%{SERVER_NAME}变量,但我找不到实现此目的的方法。

1 个答案:

答案 0 :(得分:2)

您可以使用此规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\. [NC]
RewriteRule !^domains/ domains/%1/files%{REQUEST_URI} [L,NC]