如何使用mod_rewrite链接SEO友好的多语言URL

时间:2014-08-20 18:00:09

标签: php .htaccess mod-rewrite url-rewriting

美好的一天。我正在尝试映射像" sitename.com/lang-code/pagename"使用mod_rewrite到pagename.php?lang = lang-code,所以我做了这个重写规则:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} lang
RewriteRule ^([a-z]+)/(.+)$ $2.php?lang=$1 [NC,L]
...

问题是,我在尝试更改网站语言时遇到错误。我没有使用框架,所以我的项目的文件结构有一个主文件夹,其中有视图(索引,about_us,联系人等),以及一组Db,css,js等子文件夹。我使用这篇文章开发了多语言网站:http://techbrush.org/simplest-way-to-create-a-multilingual-website/

测试解决方案,我发现如果我创建了一个名为' lang-code'的文件夹。我可以解决"错误,但我真正想要的是一个重写规则,可以告诉Apache不要阅读' lang-code'在" sitename.com/lang-code/pagename"作为文件夹。谁能帮我这个? Tyvm提前。

1 个答案:

答案 0 :(得分:0)

您的规则很可能无法执行。您正在检查查询字符串中是否存在lang,然后只读取路径的第一部分并将其用作语言。这没有意义。

您可以通过检查查询字符串中是否lang ,并且仅匹配您的网站实际支持的语言来改进此问题。例如,cssjs不是语言,即使您可能有这些文件夹来放置样式表和javascript文件。除此之外,如果url包含查询字符串,则它当前被覆盖。您可能希望使用[QSA]标志将新查询字符串附加到当前查询字符串。

你的新规则看起来像这样:

RewriteCond %{QUERY_STRING} !lang=
RewriteRule ^(en|fr|de)/(.+)$ $2.php?lang=$1 [NC,L,QSA]