htaccess的双重写规则

问题描述:

到domain.com/username重定向到以下地址htaccess的双重写规则

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ publicprofile.php?username=$1&%{QUERY_STRING} 

我开发一个移动网站,因此我需要移动用户重定向到移动网站。

这是我的代码中发现了移动重定向

RewriteCond %{HTTP_USER_AGENT} ^.*iPhone.*$ 
RewriteRule ^(.*)$ http://mobile.yourdomain.com [R=301] 
RewriteCond %{HTTP_USER_AGENT} ^.*BlackBerry.*$ 
RewriteRule ^(.*)$ http://mobile.yourdomain.com [R=301] 
RewriteCond %{HTTP_USER_AGENT} ^.*Palm.*$ 
RewriteRule ^(.*)$ http://mobile.yourdomain.com [R=301] 

如何使两者同时工作吗?

把第二块放在第一块之前,你应该很好走。

如果需要,第二个块会执行头重定向,这将导致发生新的请求。之后,内部重写规则轮到了。

允许我优化您的规则:

RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} (iphone|blackberry|palm|android) [NC] 
RewriteRule ^(.*)$ http://mobile.yourdomain.com [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ publicprofile.php?username=$1 [QSA,L] 

[NC]代表 '不区分大小写'。 [QSA]是追加查询字符串。 您可以在mod_rewrite tester测试您的规则。

+0

我的语法可能有点超临界,但`[NC]`代表`没有案例`,不区分大小写。它们是同义词,但是在展开_acronym_时,通常希望精确地展示_acronym_每个字符所代表的字符的好处。 – chown 2011-09-09 05:58:17