httpd重写规则与不同的DocumentRoot目录

时间:2010-06-28 20:14:59

标签: mod-rewrite apache

有没有办法让文件的重写规则与DocumentRoot路径不同?假设我有一个带有DocumentRoot / home / test_ltd / 的域http://test.ldt/,我希望在 static。子域(http://stats.test.ldt/)下请求文件时它会从另一条路径中查找请求的文件,例如/ home / static_files /

我被建议使用mod_alias。但是,当我需要使用子域时,我不确定如何使它工作。

到cristis:

你不对。例如,如果这些是我的httpd规则:

ServerName domain.ltd
ServerAlias www.domain.ltd

DocumentRoot /home/domain_ltd

RewriteEngine on

RewriteCond %{HTTP_HOST} static2.domain.ltd
RewriteRule (.*)$ /home/static_files/$1 [L]

DirectoryIndex index.html index.htm index.php

客户端会请求static2.domain.ltd/foo.txt,该文件将在/ home / domain_ltd / home / static_files / $ 1中搜索

2 个答案:

答案 0 :(得分:1)

您可以在RewriteRule语句中包含完整路径。例如:

RewriteEngine on
RewriteRule   ^/~(([a-z])[a-z0-9]+)(.*)  /home/$2/$1/.www$3

(摘自http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

答案 1 :(得分:1)

对我而言,将子域定义为VirtualHost并且DocumentRoot指向您想要的位置是最有意义的(虽然我们在此处进入ServerFault区域,我想......)

e.g:

<VirtualHost *:80>
    ServerName static.domain.tld

    DocumentRoot /home/static_files/

    <Directory /home/static_files>
        Options Indexes FollowSymLinks Includes
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

但如果您愿意,也可以使用mod_aliasmod_rewrite的组合来实现。这样的应该工作......

httpd.conf

Alias /static /home/static_files

.htaccess中的httpd.conf(或Directory部分的/home/domain_tld中的RewriteEngine On RewriteCond %{HTTP_HOST} ^static RewriteRule ^!static - [C] RewriteRule ^(.*)$ static/$1 [PT] ):

{{1}}