mod_rewrite多语言与URL多级


mod_rewrite multi language with URL multi level

拥有这个.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===>/premios.php?lang=pt

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

如果URL有一个多级,如:

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

URLhttp://pt.example.com/gallery/funny不起作用!

有什么帮助吗?我在这里迷路了。

您希望系统中的每个用户都自动将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被设置为username。

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

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