As a follow-up to my previous post (Internationalization – seo – mod_rewrite : Part I). If you followed my previous instructions, by now you should be the proud owner of a ‘google sitemaps‘ account and your webhost supports statistics that can tell you when a crawlbot visited your website (or raw logs, if you’re a sherlock holmes type).
Because you are reading this howto, i can conclude you have a website running on a domain or atleast a subdomain. For multi-language systems i prefer using the subdomain to set the language of the user. So if you were using www.mydomain.tld/index.php?lang=en before, you will now be using en.mydomain.tld. For a website with multiple languages that would become :
- www.mydomain.tld : would point to the default language, or will relocate the user based on browser/os/nslookup (whatever you prefer)
- en.mydomain.tld : would point to the website in english
- fr.mydomain.tld : would point to the website in french
- X.mydomain.tld : would point to the website in …
If you are using a subdomain this could be done with en.subdomain.mydomain.tld etc….
This way of working has some advantages :
- users will be able to bookmark directly in their language.
- Search engine optimalisation can be targetted on subdomains seperately
- crawlbots will easily know which language they are crawling (also due to tag)
Step 1 : Set up your nameserver records
Make sure the A records all point to the same adress, i prefer setting a records for all different languages as i do not want to point *.domain.tld to the website (for various reasons). As this is not a dns administration guide, try to find more information in the docs of your dns daemon, but before doing that check if undefined subdomains do not already point to the same ip as your main domain, this could be the case and then no configuration is needed…
You can check this by doing :
Compare the result ip adress with a ping to a subdomain :
If both ip match, you will most probably have the right nameserver configuration already, you can go straight to step 2.
Step 2 : Make sure the webserver catches the subdomain
As i am using apache only at this moment, i will only explain you briefly how to do this in apache, for all other webservers check the documentation. Try to look for the virtualhost directive of your domain in the webserver configuration, by default this will be in /etc/httpd/conf, searching for httpd.conf, apache.conf or apache2.conf will tell you where it’s located…If you split up your virtualhost directives in different files, you are most probably clever enough to find your virtualhost directive, if you didn’t check the bottom of your configation file, there should be something like this :
ServerName yourdomain DocumentRoot "/path/to/your/webroot" DirectoryIndex index.php AllowOverride All Order allow,deny Allow from All
Add a serveralias, so apache knows to catch the subdomains, there are 2 ways of doing this, you can add a ServerAlias for all different languages, or you could add a * alias, so from now on apache will catch all unknown subdomains for this domain.
Option 1 : Catch only the subdomains i want
ServerName yourdomain ServerAlias language1.yourdomain ServerAlias language2.yourdomain DocumentRoot "/path/to/your/webroot" DirectoryIndex index.php AllowOverride All Order allow,deny Allow from All
Option 2 : Catch all subdomains
ServerName yourdomain ServerAlias *.yourdomain DocumentRoot "/path/to/your/webroot" DirectoryIndex index.php AllowOverride All Order allow,deny Allow from All
Save your virtualhost config file, or main webserver configuration file and restart your webserver
apachectrl -k restart
You should now be able to see the same website you had before, using the lang.mydomain.tld subdomains, if this is not the case, check your include paths etc….I have to stop this howto for now, we will go the the coding itself in Part III