Results 1 to 7 of 7

Thread: Simple HTML site internationalization with Apache RewritRule

  1. #1
    Join Date
    Mar 2014

    Simple HTML site internationalization with Apache RewritRule

    Hi everyone!

    I made a simple HTML site (single index.html page) with two buttons to switch between languages (IT<->EN). Italian index.html is in it subfolder, english index.html is in en subfolder. The buttons modify the URL by replacing /en/ with /it/ and viceversa, allowing to switch between the pages. Everything works fine in locale. Good.

    On the server, I have this folder tree
    root (www.mysite.com)
      .htaccess (rules for rewriting)
        index.html (a blank page)
    Accessing www.mysite.com I get the blank index, as expected. Adding RewriteEngine On on the .htaccess and accessing www.mysite.com/public_html/it/index.html, I access the italian index and the language switch button works fine (in /en/index.html it works, too). Fine.

    What I want is that:
    1. www.mysite.com goes to italian index automatically, without displaying the complete url (www.mysite.com/public_html/it/index.html) but just the root (www.mysite.com) or at least the url without "public_html" (www.mysite.com/it/index.html)
    2. the language switching buttons must work

    I managed to get point 1, so I go to italian index with URL that is just www.mysite.com, by adding this to .htaccess:

    RewriteRule public_html/index.html public_html/it/index.html
    The proble is that with this the buttons won't work correctly (I suppose the problem is that there isn't actually any /it/ in the URL to switch with /en/). So I think I need a more "sophisticated" RewriteRule.

    Can anyone help me?

    Many thanks!


  2. #2
    Join Date
    Mar 2005
    Behind you...
    Perhaps sharing your button switching code would help us resolve your issue? As far as what you say you want, your rewrite rule should be fine. But since switching between languages doesn't appear to work that would be the best place to start looking for a solution.
    "Given billions of tries, could a spilled bottle of ink ever fall into the words of Shakespeare?"

  3. #3
    Join Date
    Mar 2012
    I do not understand why you need to play around with htaccess to achieve this? It would seem much simpler to me to:
    1. Put the default (italian) menu in root/index.html.
    2. Put an anchor (or input button) in index.html to call root/index-en.html.
    3. Put a corresponding anchor (or input button) in index-en.html to call root/index.html.


  4. #4
    Join Date
    Mar 2014
    Indeed, it can be useful. Here is the code
     <a href="#" onclick="var url=window.location.href; url=url.replace('/en/','/it/'); window.location.href =url;">Italiano </a> 
     <a href="#" onclick="var url=window.location.href; url=url.replace('/it/','/en/'); window.location.href =url;">English</a>
    This can do the trick, but is going to be a mess when new pages are added. Whit the rewrite I can use always te same code for all the pages.

  5. #5
    Join Date
    Mar 2005
    Behind you...
    Honestly I would have agreed with jadaisoul at least to some extent. I do feel this is a lot of complication for something that should be simple. But ultimately how you handle this is up to you and whatever you feel will make your work easier.

    To the point, you already identified that the buttons don't work because they are trying to replace part of the URL that doesn't exist (due to your rewrite rule). I'm not a fan of putting lots of javascript directly in the onclick event attributes so I'll write this as a function. You basically just need a default case to switch to the English site (given the Italian site should always be the default version).
    function _SwitchLanguage() {
      var $url = window.location.href;
      if($url.indexOf("/en/") == -1 && $url.indexOf("/it/") == -1) $url = window.location.protocol + "://" + window.location.host + "/it" + window.location.pathname;
      $url = ($url.indexOf("/it/") >= 0) ? $url.replace("/it/", "/en/") : $url.replace("/en/", "/it/");
      window.location.href = $url;
    This is designed to check if the language is already in the URL. If not it will update the $url variable to include /it/ (by default), properly inserting it into the URL (just after the domain). Then it just uses a conditional variable where it checks if the site is the English or Italian version and replaces accordingly.
    "Given billions of tries, could a spilled bottle of ink ever fall into the words of Shakespeare?"

  6. #6
    Join Date
    Mar 2014
    URL rewriting sucks. Be cleverer about it. I worked on a site that was built using the rewrite rule too much... URLs broke really easily due to casing or just being invalid.

    Just my 2 cents..

  7. #7
    Join Date
    Mar 2012
    Quote Originally Posted by il_mix View Post
    This can do the trick, but is going to be a mess when new pages are added. Whit the rewrite I can use always te same code for all the pages.
    How is that so??? The pages are written in different languages, so have to be written and maintained separately anyway!
    Furthermore, for a multi-page site, I would (and do) use PHP include files for all the common elements, header, footer, nav bar etc... That leaves only the content unique to each page, which, as I said, is going to need to be written and maintained separately anyway.
    Last edited by jedaisoul; 04-01-2014 at 02:56 PM.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
HTML5 Development Center



X vBulletin 4.2.2 Debug Information

  • Page Generation 0.11702 seconds
  • Memory Usage 2,916KB
  • Queries Executed 15 (?)
More Information
Template Usage (34):
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_global_above_footer
  • (1)ad_global_below_navbar
  • (1)ad_global_header1
  • (1)ad_global_header2
  • (1)ad_navbar_below
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)ad_thread_first_post_content
  • (1)ad_thread_last_post_content
  • (4)bbcode_code
  • (1)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)headinclude_bottom
  • (7)memberaction_dropdown
  • (1)navbar
  • (4)navbar_link
  • (1)navbar_moderation
  • (1)navbar_noticebit
  • (1)navbar_tabs
  • (2)option
  • (7)postbit
  • (7)postbit_onlinestatus
  • (7)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available (6):
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files (26):
  • ./showthread.php
  • ./global.php
  • ./includes/class_bootstrap.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/functions_navigation.php
  • ./includes/class_friendly_url.php
  • ./includes/class_hook.php
  • ./includes/class_bootstrap_framework.php
  • ./vb/vb.php
  • ./vb/phrase.php
  • ./includes/functions_facebook.php
  • ./includes/functions_calendar.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_notice.php
  • ./packages/vbattach/attach.php
  • ./vb/types.php
  • ./vb/cache.php
  • ./vb/cache/db.php
  • ./vb/cache/observer/db.php
  • ./vb/cache/observer.php 

Hooks Called (71):
  • init_startup
  • friendlyurl_resolve_class
  • init_startup_session_setup_start
  • database_pre_fetch_array
  • database_post_fetch_array
  • init_startup_session_setup_complete
  • global_bootstrap_init_start
  • global_bootstrap_init_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • load_show_variables
  • load_forum_show_variables
  • global_state_check
  • global_bootstrap_complete
  • global_start
  • style_fetch
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • strip_bbcode
  • friendlyurl_clean_fragment
  • friendlyurl_geturl
  • forumjump
  • cache_templates
  • cache_templates_process
  • template_register_var
  • template_render_output
  • fetch_template_start
  • fetch_template_complete
  • parse_templates
  • fetch_musername
  • notices_check_start
  • notices_noticebit
  • process_templates_complete
  • friendlyurl_redirect_canonical
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • memberaction_dropdown
  • tag_fetchbit
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • build_navigation_data
  • build_navigation_array
  • check_navigation_permission
  • process_navigation_links_start
  • process_navigation_links_complete
  • set_navigation_menu_element
  • build_navigation_menudata
  • build_navigation_listdata
  • build_navigation_list
  • set_navigation_tab_main
  • set_navigation_tab_fallback
  • navigation_tab_complete
  • fb_like_button
  • showthread_complete
  • page_templates