mod_rewrite具有URL多级别的多语言

时间:2015-03-19 11:35:32

标签: php .htaccess mod-rewrite

有了这个.htaccess代码:

<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 ==&gt; /premios.php?lang=pt

http://en.example.com/awards ==&gt; /premios.php?lang=en

如果URL具有如下多级别:

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

网址http://pt.example.com/gallery/funny不起作用!

有任何帮助吗?我迷路了。

1 个答案:

答案 0 :(得分: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服务器进行必要的更改才能使这些主机名正常工作。通常,这可以通过创建将* .domain.com映射到此服务器的通配符DNS条目来完成。您需要查阅特定DNS服务器的文档,了解如何完成此操作。