存储在子目录中的多个网站的通用.htaccess

时间:2012-09-03 12:16:40

标签: apache .htaccess mod-rewrite host

我的开发环境设置为使用单个主机(localhost)。我正在我的机器上开发多个网站,每个网站都存储在自己的目录下,如下所示:

     /var/www/site1
     /var/www/site2
     ...

我的计算机上的文档根目录设置为/var/www

我正在对大多数这些网站使用网址重写,大多数.htaccess文件会以不同的方式将子目录重写为 GET 参数:

http://localhost/site1/home/red -> http://localhost/site1/index.php?page=home&p1=red
http://localhost/site2/index/param1/param2/param3 -> http://localhost/site2/index.php?page=index&p1=param1&p2=param2&p3=param3

我也倾向于将这些网站中的一些复制到不同的目录下,当我这样做时,我必须对我正在复制的网站的.htaccess文件进行大量更改。

我想知道是否有办法定义一个包含网站根目录(而不是主机的文档根目录)的常量,以及如何将其与重写规则一起使用,以便我只需要更改一行复制网站时的代码(将此常量设置为不同的值)。

将其置于不同的形式,有没有办法执行与网站根目录而不是主机/ %{HTTP_HOST}相关的重写(即网站的“主机”为localhost/site1而不是localhost)以及如何做到这一点?

我尝试在脚本开头从每个请求中删除主机,然后在脚本末尾将其重新添加,但这不适用于使用[L]选项的重写规则。

谢谢!

此致 卢西恩

1 个答案:

答案 0 :(得分:1)

您可以使用以下规则制作htaccess文件:

RewriteEngine On
RewriteBase /site1/
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+) index.php?page=$1&p1=$2&p2=$3&p4=$4 [L,QSA]

并将其放在/var/www/site1目录中,如果您希望将其应用于site2,请更改RewriteBase并将规则放在/var/www/site2中。