.htaccess mobile和pc没有使用查询字符串正确重定向

时间:2016-08-19 08:21:17

标签: apache .htaccess

目前,我正在将网址从PC重定向到移动设备。

RewriteRule ^ http://m.example.com%{REQUEST_URI}? [R=301,L]

上面代码的问题是它削减了吗?重定向到移动网址时所有查询字符串

现在,在将http://www.example.com/bangkok/(原http://www.example.com/jobs-list-province.php?p_name=bangkok)的网址重写为

时,这不会有问题
http://m.example.com/bangkok/

但是它需要通过查询字符串发送的URL有问题,例如: http://www.example.com/keyword-search.php?s_keyword=analyst重定向到http://m.example.com/keyword-search.php而不是h ttp://m.example.com/keyword-search.php?s_keyword=analyst

所以我尝试使用此代码解决问题

RewriteRule ^ http://m.example.com%{REQUEST_URI}? [QSA,R=301,L]

或者此代码

RewriteRule ^ http://m.example.com%{REQUEST_URI} [R=301,L]

当我使用上面的代码时,它有重定向问题 http://www.example.com/bangkok/代替:http://m.example.com/bangkok/?p_name=bangkok

我如何重写呢? http://www.example.com/bangkok/转到http://m.example.com/bangkok/http://www.example.com/keyword-search.php?s_keyword=analyst转到http://m.example.com/keyword-search.php?s_keyword=analyst

有关详细信息,请参阅随附的htaccess文件。谢谢您的帮助。

#Redirect to www location
RewriteEngine on
RewriteBase /
rewritecond %{http_host} ^example.com [nc]
rewriterule ^(.*)$ http://www.example.com/$1 [r=301,nc] 

rewriterule ^(bangkok)$ /jobs-list-province.php?p_name=$1

# Check if mobile=1 is set and set cookie 'mobile' equal to 1
        RewriteCond %{QUERY_STRING} (^|&)mobile=1(&|$)
    RewriteRule ^ - [CO=mobile:1:%{HTTP_HOST}]

# Check if mobile=0 is set and set cookie 'mobile' equal to 0
    RewriteCond %{QUERY_STRING} (^|&)mobile=0(&|$)
RewriteRule ^ - [CO=mobile:0:%{HTTP_HOST}]

 # cookie can't be set and read in the same request so check
 RewriteCond %{QUERY_STRING} (^|&)mobile=0(&|$)
    RewriteRule ^ - [S=1]

    # Check if this looks like a mobile device
    RewriteCond %{HTTP:x-wap-profile} !^$ [OR]
    RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC,OR]
    RewriteCond %{HTTP:Profile}       !^$

 # Check if we're not already on the mobile site
    RewriteCond %{HTTP_HOST}          !^m\.   
    # Check to make sure we haven't set the cookie before
    RewriteCond %{HTTP_COOKIE} !mobile=0(;|$) [NC]          

    RewriteRule ^ http://m.example.com%{REQUEST_URI}? [R=301,L]   

1 个答案:

答案 0 :(得分:0)

你需要做两件事:

  1. (您已经尝试过)是从

    中删除问号

    RewriteRule ^ http://m.example.com%{REQUEST_URI}? [QSA,R=301,L]

    因为它阻止查询字符串传递不变。

  2. 移动此规则:

    rewriterule ^(bangkok)$ /jobs-list-province.php?p_name=$1

    到底,因为你不希望你的规则混合。首先处理重定向到移动网站,然后检查/bangkok重写