使用.htaccess文件获取子域名

使用.htaccess文件获取子域名,.htaccess,.htaccess,我在一个网站上工作,每个用户都有自己的子域。 我需要用户只能看到一些图像,这取决于子域名。 例如: user1.domain.com应该在root/images/user1文件夹中获取图像/ 和 user2.domain.com应该在root/images/user2文件夹中获取图像/ 我使用类似的方法如下: # For security reasons, Option followsymlinks cannot be overridden. #Options +FollowSymLinks -

我在一个网站上工作,每个用户都有自己的子域。 我需要用户只能看到一些图像,这取决于子域名。 例如: user1.domain.com应该在root/images/user1文件夹中获取图像/ 和 user2.domain.com应该在root/images/user2文件夹中获取图像/

我使用类似的方法如下:

# For security reasons, Option followsymlinks cannot be overridden.
#Options +FollowSymLinks -MultiViews
Options +SymLinksIfOwnerMatch -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^temp\.domain\.com$ [NC]
RewriteRule ^$ /logo-base.png [L]

RewriteCond %{DOCUMENT_ROOT}/access_temp_files/$1 -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /access_temp_files/$1 [L]

RewriteCond %{DOCUMENT_ROOT}/access_temp_files/$1 !-f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /pic-base.png [L]
# replacing "temp" with subdomain name in: RewriteCond %{HTTP_HOST} ^temp\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(subdomainname)\.domain\.com$ [NC]

# replacing "access_temp_files" with subdomain name in: RewriteCond %{DOCUMENT_ROOT}/access_temp_files/$1 -f
RewriteCond %{DOCUMENT_ROOT}/(subdomainname)/$1 -f
在这种情况下,当url为temp.domain.com/image.png时,它在root/access\u temp\u files/image.png处获取图像,如果不存在,则在root处打印pic-base.png/

所以我需要同样的东西,但我需要得到子域名 并在不同的地方使用它,例如替换“temp”和“access_temp_files”,如下所示:

# For security reasons, Option followsymlinks cannot be overridden.
#Options +FollowSymLinks -MultiViews
Options +SymLinksIfOwnerMatch -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^temp\.domain\.com$ [NC]
RewriteRule ^$ /logo-base.png [L]

RewriteCond %{DOCUMENT_ROOT}/access_temp_files/$1 -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /access_temp_files/$1 [L]

RewriteCond %{DOCUMENT_ROOT}/access_temp_files/$1 !-f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /pic-base.png [L]
# replacing "temp" with subdomain name in: RewriteCond %{HTTP_HOST} ^temp\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(subdomainname)\.domain\.com$ [NC]

# replacing "access_temp_files" with subdomain name in: RewriteCond %{DOCUMENT_ROOT}/access_temp_files/$1 -f
RewriteCond %{DOCUMENT_ROOT}/(subdomainname)/$1 -f
如何在.htaccess文件中获取子域名

我希望这不会让人太困惑而难以理解:)


谢谢。

您可以使用以下规则:

# For security reasons, Option followsymlinks cannot be overridden.
#Options +FollowSymLinks -MultiViews
Options +SymLinksIfOwnerMatch -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^temp\.domain\.com$ [NC]
RewriteRule ^$ /logo-base.png [L]

RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /%1/$1 [L]

RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteCond %{DOCUMENT_ROOT}/%1/$1 !-f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /pic-base.png [L]

我知道您正在询问如何使用.htaccess实现这一点,但我个人会使用创建该功能。这样,就可以为特定子域指定文档根。然后,您可以在每个子域的文件夹中放置一个单独的.htaccess,也可以在子域文件夹的父文件夹中放置一个全局的.htaccess

<VirtualHost *:80>
DocumentRoot /root/images/user1/
ServerName user1.domain.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /root/images/user2/
ServerName user2.domain.com

# Other directives here

</VirtualHost>

DocumentRoot/root/images/user1/
ServerName user1.domain.com
#这里还有其他指示
DocumentRoot/root/images/user2/
ServerName user2.domain.com
#这里还有其他指示

谢谢您的回答。我不明白你的例子中的子域名在哪里。在此
RewriteCond%{HTTP_HOST}^temp\.domain\.com$[NC]
中,“temp”应为子域名。谢谢。子域的第一部分是从
RewriteCond%{HTTP_HOST}^([^.]+)
条件中捕获的,它使
%1
成为
temp
子域=
temp.domain.com
我会试试。非常感谢。谢谢您的回答,但我不知道如何使用virtualhost。我对.htaccess文件等不太了解@Pedro这很简单。您只需在httpd.conf文件中放入上述代码。