我有一个多语言网站和.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文件以满足此标准?怎么办?
提前致谢
答案 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]
因此,您不会最终修复现有文件和/或目录的各种奇怪问题。