我已经在互联网上搜索了这个问题的解决方案,阅读了有关它的各种线程和文章,但确实找到了我的完整解决方案 - 我认为mod_rewrite中存在非常普遍的问题。这是问题所在:
我开发了一个小型的网络应用程序,可以让用户进行计算(假期后分摊费用“谁付钱给谁”)。现在我已经到了我想要使它(特别是静态页面)语言依赖的地步。通过传递get参数似乎没什么大不了的?lang =根据我的研究似乎对搜索引擎来说是一个问题 - 所以apache mod_rewrite来救援以获得漂亮的URL,如
example.com/en/index => example.com/index.php?lang=en。
example.com/en/about => example.com/about.php?lang=en。
此外,用户应该能够与他们的朋友分享他们的计算 - 为此,他们会在学习后获得一个ID,因此像
这样的规则example.com/c/9842398dfalkjdsf98sfdasf => example.com/c.php?id=9842398dfalkjdsf98sfdasf
用于调用之前的计算(语言处理直接在脚本中自动完成,也不需要在任何搜索引擎中对此链接进行索引)。
为实现这一目标,我提出了以下规则:
上的RewriteEngineRewriteRule ^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]
到目前为止,这些规则仍有效 - 但是:
以下是我的问题:
1)这种方法对语言相关网站来说是一种很好的方法 - 这意味着谷歌会像“约会”这样的“静态”网站正确索引吗? 2)有人提出重写规则也有像
这样的请求example.com/about => example.com/about.php?lang=en。 (注意第一个网址中缺少的语言参数) 将它们发送到标准语言
或者我应该首先获得他们的语言,然后将它们重定向到example.com/LANG/about
3)我应该如何设计语言检测 - 尤其是在主页上?现在它按照上面的规则工作 - 我怎么看到互联网上的解决方案首先将所有内容传递给index.php然后调用disred页面
的index.php郎= EN&安培;页=约
当谷歌“访问”时,它通常不会提供HTTP_ACCEPT_LANGUAGE,所以它甚至会看到其他语言版本,如example.com/it/about?
4)事实证明使用RewriteRules会破坏你的相关CSS,JS,你的代码中的图片链接(太惊讶!),但是我在互联网上找到了一个页面,说这也可以用RewriteRule处理,而不是使用absoulute路径在HTML? (here)。不幸的是我无法实现它。
简而言之: 我有点困惑,希望有人可以帮助建立一个简单的SEO符合,语言相关的网站,这将有助于其他人看到一个整体的最佳实践解决方案。
提前致谢!
答案 0 :(得分:0)
试试这个,谢谢
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]