2015-03-19 102 views
1

有了这个的.htaccess代码:mod_rewrite的多语言,多URL级别

<IfModule mod_rewrite.c> 
    RewriteCond %{HTTP_HOST} !www.example.com$ [NC] 
    RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).example.com [NC] 
    RewriteRule ^(.*)/(.*)$ http://example.com/$2?lang=%2 [L,P] 
</IfModule> 

这伟大工程!对于下面的例子:

RewriteRule ^awards$ premios.php [L,QSA] 

http://pt.example.com/awards ==> /premios.php?lang=pt

http://en.example.com/awards ==> /premios.php?lang=en

如果URL具有多级别如下:

RewriteRule ^gallery/funny$ gallery-funny.php [L,QSA] 

该URL http://pt.example.com/gallery/funny不起作用!

任何帮助?我迷失在这里。

+0

你可以显示完整的.htaccess有问题吗?然后再添加重写不起作用。 – anubhava 2015-03-19 15:36:50

回答

1

您希望系统上的每个用户自动将username.domain.com映射到其主目录。

RewriteEngine On 
# Skip www.domain.com 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com 
RewriteRule ^/(.*)$ /home/%1/www/$1 [L] 

第一个RewriteCond从www.domain.com跳过对我们想要通过常规机制处理的内容的请求。排除您不想映射到主目录的其他主机名也可能很有用。

第二个RewriteCond存在来捕获请求的主机名。当在RewriteCond中捕获匹配(通过使用括号)时,捕获的模式进入变量%1,%2,%3等等。在这种情况下,对username.domain.com主机名的请求将导致%1被设置为用户名。

最后,我们的RewriteRule捕获整个请求的URL,并使其从该用户的主目录中提供。例如,请求http://rbowen.domain.com/foo/bar.html将导致提供文件/home/rbowen/www/foo/bar.html。

请务必注意,您仍然需要对DNS服务器进行必要的更改才能使这些主机名正常工作。通常,这可以通过创建通配符DNS条目映射* .domain.com到此服务器来完成。您将需要查阅有关特定DNS服务器的文档,以了解如何完成此操作。

+0

https://wiki.apache.org/httpd/RewriteVhosts?我不希望“让系统中的每个用户自动将username.domain.com映射到其主目录”:) – 2015-03-19 12:29:12