htaccess重定向到文件夹,忽略子域

时间:2018-05-14 20:45:33

标签: .htaccess redirect

我无法创建.htaccess规则来执行此操作 域名是ico。[任何域名] 文件都是图标文件(.ico,.gif,.png,.svg)[此处没有任何其他服务]。
而且我需要根据根域从文件夹中提供图标(永久重定向),即: https://ico.example0.com/favicon.icohttps://ico.example0.com/www.example0.com/favicon.ico
https://ico.example1.com/apple-touch-icon.pnghttps://ico.example1.com/www.example1.com/apple-touch-icon.png
https://ico.example2.com/favicon.gifhttps://ico.example0.com/www.example2.com/favicon.gif

这可以吗?
谢谢!
-Brian

1 个答案:

答案 0 :(得分:0)

是的,你可以做到。

您需要为%DOCUMENT_ROOT%中的每个域创建目录(为此我创建了 www.google.com www.facebook.com

root@alberta:/var/www/html# ls -ltr
total 32
-rw-r--r--  1 www-data www-data 10701 Apr 16 11:01 index.html
drwxr-xr-x 15 www-data www-data 12288 Apr 16 14:52 mantis
drwxr-xr-x  2 www-data www-data 4096 May 18 15:02 www.google.com
drwxr-xr-x  2 www-data www-data 4096 May 18 15:04 www.facebook.com

添加规则以使用%HTTP_HOST%(请求来自的域)作为基础重定向。我在我的默认虚拟主机/etc/apache2/sites-available/000-default.conf中添加了规则:

    RewriteEngine on
    RewriteRule ^/?(.*) %{DOCUMENT_ROOT}/%{HTTP_HOST}/$1 [L]

这导致了这种配置:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        RewriteEngine on
        RewriteRule ^/?(.*) %{DOCUMENT_ROOT}/%{HTTP_HOST}/$1 [L]
        Include conf-available/serve-cgi-bin.conf
</VirtualHost>

我已经使用CURL模拟了请求并且它正常工作(参数 - 标题主机:告诉apache我是哪个域)

root@alberta:/etc/apache2/sites-available# curl --verbose --header 'Host: www.google.com' 'localhost'

答案是我的www.google.com目录中的文档html:

< HTTP/1.1 200 OK
...
<p>ok google.com</p>

与facebook相同:

root@alberta:/etc/apache2/sites-available# curl --verbose --header 'Host: www.facebook.com' 'localhost'

答案是我的www.facebook.com文件夹中的文件:

< HTTP/1.1 200 OK
...
<p>my facebook.com</p>

干杯!