将url重写到子域上的子目录

时间:2013-12-31 03:21:26

标签: php apache .htaccess url-rewriting

我的所有客户网站都位于子域名目录中:

customers.example.com/sites/customer_name

我想重写网址,以便我的客户只需要编写

customers.example.com/customer_name

我尝试了一些不同的htacces脚本,但没有一个可行。其中一个给了我一个error 500 internal server error,所以我的mod_rewrite是有效的

这是我当前的.htaccess文件:

RewriteEngine On
RewriteRule ^sites/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]
RewriteRule ^(.*)$ /sites/$1/ [QSA,L]

2 个答案:

答案 0 :(得分:1)

由于重写引擎循环,此模式^(.*)$将盲目匹配所有内容,包括规则的目标:/sites/something。它会继续将/sites/附加到URI的前面,直到您最终得到/sites/sites/sites/sites/sites/sites/sites/等内容。

您需要添加一些条件来阻止循环,如下所示:

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

RewriteCond %{REQUEST_URI} !^/sites/
RewriteRule ^(.*)$ /sites/$1/ [L]

RewriteCond %{DOCUMENT_ROOT}/sites%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/sites%{REQUEST_URI} -d
RewriteRule ^(.*)$ /sites/$1/ [L]

答案 1 :(得分:0)

这应该有用......如果正确理解你的最终目标。但不清楚您是否希望同时从customers.example.com/sites/customer_namecustomers.example.com/customer_name访问内容:

RewriteEngine on
RewriteRule ^/sites/(.*)$ http://customers.example.com/$1 [L,R=301]