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