mod_rewrite on apache - language parameter

≯℡__Kan透↙ 提交于 2021-01-28 13:33:21

问题


I have searched for a solution of this problem all over the Internet, read various threads and articles about it but did come to a full solution for my - i think quite generic problem in mod_rewrite. Here is the issue:

I have developed a small webapp that lets users make calculations (splitting costs after holidays "who pays to whom"). Now I have come to the point where I want to make it (especially the static pages) language dependent. What seemed like no big deal by passing a get parameter ?lang= seems to be a problem for search engines according to my research - so apache mod_rewrite to the rescue to have beautiful URLs like

example.com/en/index => example.com/index.php?lang=en.

example.com/en/about => example.com/about.php?lang=en.

Moreover, users should be able to share their calculations with their friends - for this they are issued an ID after caluclation therefore a rule like

example.com/c/9842398dfalkjdsf98sfdasf => example.com/c.php?id=9842398dfalkjdsf98sfdasf

is used to call their previous calculations (language handling is done here directly in the script automatically, also this links are not needed to be indexed in any search engine).

To achieve this I have come up with these rules: RewriteEngine on

RewriteRule ^c/([^/]+) c.php?id=$1 [L,QSA]

RewriteRule ^c/([^/]+)/ c.php?id=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^/]+)/([^/]+)/$ $2.php?lang=$1 [L,QSA]

RewriteRule ^([^/]+)/([^/]+)$ $2.php?lang=$1 [L,QSA]

So far these rules work - however:

Here are my questions:

1) Is this approach a good approach for language dependent sites - meaning will google index the "static" sites like "about" etc. correctly? 2) Come somebody come up with a Rewrite Rule to also have requests like

example.com/about => example.com/about.php?lang=en. (notice the missing language parameter in the first url) to send them to the standard language

OR should I then first get their accpted langauge and then redirect them to example.com/LANG/about

3) How should I design the language detection - especially on the homepage? Right now it works according to the rules above - howver I have seen solutions on the Internet passing everything first to a index.php which then call the disred page like

index.php?lang=en&page=about

When google "visits" it will usually not provide an HTTP_ACCEPT_LANGUAGE so will it even ever see the other language versions like example.com/it/about ?

4) Turns out that using RewriteRules kill your relative CSS, JS, picture links in your code (suprise!), however I found a page on the internet saying that this also could be handled with a RewriteRule instead of using absoulute paths in the html? (here). Unfortunately I where not able to implement it.

In a nutshell: I am a little confused, hope somebody can help how to set up a simple SEO conform, language dependent site and that this will help others to see a best practice solution as a whole.

Thanks in advance!


回答1:


Try this , thank you

RewriteEngine On

# This is to prevent the rules from looping, they only work as on-shot
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

# If the url is blank, go to 'web/en/'
RewriteRule ^/?$ /web/?lang=en [L,QSA]

# If the url starts with en,es,pt-br, remove it and add ?lang=$1 ,has /web
RewriteRule ^/?(en|es|pt-br)/web(/?.*)$ /web$2/?lang=$1 [L,QSA,R]

# If the url starts with en,es,pt-br, remove it and add ?lang=$1 ,has no /web
RewriteRule ^/?(en|es|pt-br)/?$ /web/?lang=$1 [L,QSA,R]

# If the url starts with en,es,pt-br, remove it and add ?lang=$1 ,everything else
RewriteRule ^/?(en|es|pt-br)/(.+?)/?$ /$2/?lang=$1 [L,QSA,R]


来源:https://stackoverflow.com/questions/26011776/mod-rewrite-on-apache-language-parameter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!