WordPress Mobile – Change Part of the URL Instead of Redirecting to the Front Page?

I’ve been called to do some maintenance work on a client site that I didn’t help build. The site is built with WordPress, and any user on a mobile device will be redirected to a more mobile-friendly version of the site. The problem is that if the mobile user clicks any link to the original site (home page, inner page, etc), no matter what link it is, they always get redirected to the front page of the mobile site. What I am trying to do is replace part of the current URL from .ca to .mobi so that the mobile users get redirected straight to the mobile version of the original page instead of the mobile home page.

I looked at how to replace part of the URL with JavaScript? and tried Matt and Juan’s suggestions, but neither of them worked and instead cause errors. I’m hoping someone can help me here.

Read More

Currently, this is the code in header.php that detects if the user is on a mobile device,

    /* --- DETECT MOBILE BROWSER ---*/

$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|symbian|treo|up.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|e-|e/|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(-|2|g)|yas-|your|zeto|zte-/i',substr($useragent,0,4))){
    header('Location: http://sitenamehere.mobi');
}
/* --- END DETECT MOBILE BROWSER ---*/

Related posts

Leave a Reply

2 comments

  1. The location header needs to contain the full URL – currently it only contains the URL of the homepage. Therefore you need to obtain the current URL and replace the .ca with .mobi, then change the location header to this. This should be along the right lines:

    header('Location: ' . str_replace('.ca', '.mobi', $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]));
    
  2. Thanks to Eliot’s help, I was able to find a way to get what I needed and work around the 414 request URI error.

    $cope_link = ($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); //get the current link
    $cope_new = substr($cope_link, 15); //grab only what is after ".ca/", found length through trial and error
    header('Location: http://sitenamehere.mobi/'.$cope_new); //send in the new URL
    

    I tested it on browserstack and it seems to be working. Thanks again Eliot for pointing me in the right direction.