如何重定向.htaccess? => / ua / to /?lang = ua

时间:2011-12-13 17:23:48

标签: .htaccess mod-rewrite redirect

我有一个多语言网站和.htaccess,它显示 所有页面 语言 ?lang = ua 风格。

我想重定向(使用代码301)使用RewriteEngine向 site.com/?lang=en 询问 site.com/en/

示例:

site.com/en/               => site.com/?lang=en
site.com/ua/news.html      => site.com/news.html?lang=ua
site.com/ua/news/2-material-two.html => site.com/news/2-material-two.html?lang=ua
and so on much...

如何为Apache准备Htaccess文件以满足此标准?怎么办?

提前致谢

4 个答案:

答案 0 :(得分:1)

将此代码放在DOCUMENT_ROOT目录下的.htaccess文件中:

Options +FollowSymLinks
RewriteEngine on

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

答案 1 :(得分:0)

试试这个:

Options +FollowSymlinks

RewriteEngine on

RewriteOptions MaxRedirects=10

RewriteBase /

RewriteRule http://site.com/([^/]+)/(.+).html$ http://site.com/$2.html?lang=$1 [R=301,NC]

我只是将它放在我的头顶,所以它可能不太正确,但想法是它会检查url并且([^/]+)应该读取第一个目录,然后读取一切都达到.html。

然后将第一个dir之后的网址重写为site.com/ [所有内容.html] .html?lang = [名字第一目录]

答案 2 :(得分:0)

将以下内容添加到域根目录中的htaccess文件

RewriteEngine On
RewriteBase /

#if the lang param is not present
RewriteCond %{QUERY_STRING} !^lang=
#capture the language code and redirec to url with lang param
RewriteRule ^([a-zA-Z]+)/(.+\.html)$ /$2?lang=$1 [L,R=301,NC]

答案 3 :(得分:0)

如果你必须使用一般的“可能目录匹配”-rule,请考虑!-d运算符(和可选:!-f运算符)。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]{2})/ http://site.com/?lang=$1 [R=301,L]

因此,您不会最终修复现有文件和/或目录的各种奇怪问题。