0

I recently created a mobile version for my website and redirect to a mobile version. The mobile version is in a subdomain (folder) in my root. Redirecting is done through a php script in the header of all files in the root, so far the index.php is working.

Now I need to add rules into my htaccess so all urls as in the normal root will also work / maintain same structure in the subdomain folder.

www.mysite.com and for mobile it is m.mysite.com

url structure in site:

    For desktop following urls and files out of root
www.mysite.com/basisscholen/
www.mysite.com/middelbaar-onderwijs/
www.mysite.com/hbo-universiteit/
www.mysite.com/basisscholen/plaats/m/
www.mysite.com/middelbaar-onderwijs/plaats/m/
www.mysite.com/hbo-universiteit/plaats/m/
www.mysite.com/basisscholen/plaats/m/miami/
www.mysite.com/basisscholen/plaats/m/miami/myschool/

For desktop following urls and files out of folder (m) so that different css can be used:
m.mysite.com/basisscholen/
m.mysite.com/middelbaar-onderwijs/
m.mysite.com/hbo-universiteit/
m.mysite.com/basisscholen/plaats/m/
m.mysite.com/middelbaar-onderwijs/plaats/m/
m.mysite.com/hbo-universiteit/plaats/m/
m.mysite.com/basisscholen/plaats/m/miami/
m.mysite.com/basisscholen/plaats/m/miami/myschool/

Here are my htacces rules for the normal desktop version:

    RewriteEngine On

RewriteCond %{HTTP_HOST} !^m\.
RewriteCond %{HTTP_USER_AGENT} "sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "mini|nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie-"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|iPhone|android"[NC]
RewriteRule ^ xx-xxxx%{REQUEST_URI} [L,NC,R=302]



RewriteRule ^\.html$ /index.php
RewriteRule ^basisscholen/$ basisscholen.php?id=basisscholen [L]
RewriteRule ^middelbaar-onderwijs/$ middelbaar-onderwijs.php?id=middelbaar-onderwijs [L]
RewriteRule ^hbo-universiteit/$ hbo-universiteit.php?id=middelbaar-onderwijs [L]

RewriteRule ^basisscholen/plaats/([A-Za-z0-9-]+)/?$ basisscholen.php?letter=$1 [L,B]
RewriteRule ^middelbaar-onderwijs/plaats/([A-Za-z0-9-]+)/?$ middelbaar-onderwijs.php?letter=$1 [L,B]
RewriteRule ^hbo-universiteit/plaats/([A-Za-z0-9-]+)/?$ hbo-universiteit.php?letter=$1 [L,B]


RewriteRule ^([^/]+)/plaats/([^/]+)/([^/]+)/?$ plaats.php?type=$1&letter=$2&link=$3 [L,B]
RewriteRule ^([^/]+)/plaats/([^/]+)/([^/]+)/([^/]+)/?$ school.php?type=$1&letter=$2&plaatsnaam=$3&schoolnaam=$4 [L,B]

What I need is how the htacces rules should be to get subdomain url structure working exactly as main site. had a lot of white screens, acces forbidden or all url rewritten to subdomain.

Also tried a lot of suggestions out of other topics, can somebody please help me ?

Cor

3 Answers3

0

Assuming your mobile subdomain folder is called mobile under DOCUMENT_ROOT you can have this in your root .htaccess:

RewriteCond %{HTTP_HOST} !^m\.
RewriteCond %{HTTP_USER_AGENT} "sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "mini|nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie-"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|iPhone|android"[NC]
RewriteRule ^ http://m.mysite.com%{REQUEST_URI} [L,NC,R=302]

Make sure to have this rule before any other rule.

anubhava
  • 761,203
  • 64
  • 569
  • 643
  • Hi,Thnx, but it does not work, even added new subdomain to match your rules, flushed dns etc. – user2886629 Oct 16 '13 at 14:22
  • Can you post your complete & latest `.htaccess` in your question? – anubhava Oct 16 '13 at 14:29
  • complete htacces is now placed in original question. – user2886629 Oct 16 '13 at 14:35
  • Hi, tried youre edited version, it only works for the index file in the mobile. i cannot get other urls in mobile. Error 404 url not found m.mysite.com/basisscholen/ – user2886629 Oct 16 '13 at 15:13
  • I am actually using `http://m.mysite.com%{REQUEST_URI}` so it should work for any `http://www.mysite.com/anything` – anubhava Oct 16 '13 at 15:14
  • Error log on server states file does not exist, were in folder m the file is present. – user2886629 Oct 16 '13 at 15:28
  • So when you enter `http://www.mysite.com/anything` from a mobile browser it doesn't become `http://m.mysite.com/anything`? – anubhava Oct 16 '13 at 15:37
  • Ok,removed subdomain, cleared all cache on all devices, flushed dns, then I cleaned up all the php, css and html errors I could find in the server error logs. Then I recreated the subdomain through directadmin panel, and uploaded the files again. Only the home/index.php file is visible. So m.mysite.com works, but m.mysite.com/basisscholen/ gives url not found in browser and file not found in error log from subdomain. My domain name has a - in it, could that mather for htacces? So like this: my-site.com ?? – user2886629 Oct 16 '13 at 20:38
  • What do you mean by `Then I recreated the subdomain through directadmin panel` Since your question and my answer doesn't cover this. – anubhava Oct 16 '13 at 20:40
  • i rebooted everything, removed the subdomain and after rebooting the server I created the subdomain again and uploaded all the files. This is the server error: File does not exist: /home/websites/domains/schooltje-vanmij.nl/public_html/m/404.shtml, referer: http://m.schooltje-vanmij.nl/ – user2886629 Oct 16 '13 at 20:54
  • What is DOCUMENT_ROOT for `m.mysite.com`? – anubhava Oct 16 '13 at 21:01
  • document root = /home/websites/domains/schooltje-vanmij.nl/public_html/m – user2886629 Oct 16 '13 at 21:14
  • Is there any .htaccess inside `/home/websites/domains/schooltje-vanmij.nl/public_html/m`? – anubhava Oct 16 '13 at 21:18
  • There is no htaccess file in the .m folder – user2886629 Oct 17 '13 at 06:55
  • In that case post your complete .htccess from DOCUMENT_ROOT and I need to know your `VirtualHost` config for mobile subdomain since it is not clear to me how this subdomain has been setup. – anubhava Oct 17 '13 at 07:14
  • Complete htacces is now placed in original question. My host setup is like this: added one record to host for wildcard subdomains: Name Type Value * A 46.249.33.138 – user2886629 Oct 17 '13 at 08:46
  • And can you tell me how are you testing this mobile site? – anubhava Oct 17 '13 at 09:21
  • I use a htc desire mobile phone and next to that I use the laptop. Also on mobile phone the redirect is done, first page (subdomain) is visisble, but next page does not work – user2886629 Oct 17 '13 at 09:34
  • Damn, got it working now. Thnx sofar, rebooted server a few times more and now he goes to the next page. I will program a few pages and check them for working, and maybe I will need you again. – user2886629 Oct 17 '13 at 09:59
  • Glad to know, you can mark the answer as accepted. (Though you can still ask questions in comment) – anubhava Oct 17 '13 at 10:02
  • Ok, now the following, instead of using my basisscholen.php file out of subdomain folder he uses the php basisscholen.php file out of root. and that goes for all files. Why is that ? – user2886629 Oct 17 '13 at 10:11
  • For what URLs does it use php files out of root? – anubhava Oct 17 '13 at 10:21
  • I have put all the urls in orignal question, also the rules for desktop are there, do I need extra rules to rewrite to the mobile folder and urls ? – user2886629 Oct 17 '13 at 10:45
  • So when you are loading `http://m.mysite.com/basisscholen.php` it is opening `http://www.mysite.com/basisscholen.php` ? – anubhava Oct 17 '13 at 10:57
  • No, the url http://m.mysite.com/basisscholen/ uses the php file from desktop http://www.mysite.com/basisscholen.php should I not have something like this: http://stackoverflow.com/a/13826978/2886629 – user2886629 Oct 17 '13 at 11:02
  • So rules like this: RewriteRule ^.*basisscholen/(.*)$ /m/basisscholen.php?id=basisscholen [L] RewriteRule ^.*.html$ /m/index.php [L] – user2886629 Oct 17 '13 at 11:33
  • No if you setup your `m` domain properly then DOCUMENT_ROOT would be `/home/websites/domains/schooltje-vanmij.nl/public_html/m` and any `http://m.mysite.com/basisscholen.php` will automatically use `/m/basisscholen.php` – anubhava Oct 17 '13 at 12:00
0

Solved the problem temporarely this way:

Removed subdomain from direct admin cleaned conf file in vhost.

Created a domain on server as subdomain >> m.my-domain.com

Then uploaded the mobile version + a htacces file without the mobile rules.

Uploaded a php redirect script in the desktop version.

I know its not the right way, but the site works.

will post this problem also on direct admin forum to find out why the vhost conf did not accept the solution you suggested.

0
    Options +FollowSymlinks

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  RewriteCond %{HTTP_HOST} ^example.com
  RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

  RewriteCond $1 !^(?:static|install)(?:/.*)?$
  RewriteRule ^(.*)$ index.php?ORIGINAL_URI=$1 [QSA

  RewriteCond %{HTTP_HOST} !^m.example.com$
  RewriteCond %{HTTP_USER_AGENT} (android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge\ |maemo|midp|mmp|netfront|opera\ m(ob|in)i|palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows\ (ce|phone)|xda|xiino [NC,OR]
  RewriteCond %{HTTP_USER_AGENT} ^(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|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(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|yas\-|your|zeto|zte\-) [NC]
  RewriteRule ^(.*)$ http://m.example.com/$1 [R=302,L]
</IfModule>

Something like this i guess?

(change example.com to your site)

Advil
  • 43
  • 6