【问题标题】:Get subdomain name with .htaccess file使用 .htaccess 文件获取子域名
【发布时间】:2014-07-29 15:08:52
【问题描述】:

我在一个每个用户都有自己的子域的站点中工作。 而且我需要该用户只能看到一些图像,具体取决于子域名。 例如: 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]

在这种情况下,当 url 为 temp.domain.com/image.png 时,它会在 root/access_temp_files/image.png 获取图像,如果不存在,则在 root/ 处打印 pic-base.png

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

# 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 文件中获取子域名?

我希望这不会太混乱而难以理解:)

谢谢。

【问题讨论】:

    标签: .htaccess


    【解决方案1】:

    您可以使用这些规则:

    # 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]
    

    【讨论】:

    • 感谢您的回答。我不明白您的示例中的子域名在哪里。在这个RewriteCond %{HTTP_HOST} ^temp\.domain\.com$ [NC] "temp" 应该是子域名。谢谢。
    • 子域的第一部分是从RewriteCond %{HTTP_HOST} ^([^.]+) 条件中捕获的,这使得%1 成为temp for subdomain=temp.domain.com
    • 我会试试的。非常感谢。
    【解决方案2】:

    我知道您在询问如何使用 .htaccess 执行此操作,但我个人会使用 virtual hosts 创建该功能。这样,您可以指定特定子域的文档根目录。然后你可以在每个子域的文件夹中放置一个单独的.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>
    

    【讨论】:

    • 感谢您的回答,但我不知道如何使用虚拟主机。我不太了解 .htaccess 文件等。
    • @Pedro 这很简单。您只需将上述代码放入您的 httpd.conf 文件中。
    猜你喜欢
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多