.htaccess 重写 URL 检查是否设置了语言


.htaccess rewrite url check if languages is set

I have index.php 它用 index.php?lang=de 设置语言。英语是我不需要使用的默认语言 index.php?lang=en

设置语言时,它会在 htaccess 中使用此条件

RewriteRule ^([a-zA-Z0-9'-_]+)/$ /index.php?lang=$1 [L]

未设置语言时

RewriteRule ^([a-zA-Z0-9'-_]+)$ /index.php?pag=$1 [L]

设置语言和页面时

RewriteRule ^([a-zA-Z0-9'-_]+)/([a-zA-Z0-9'-_]+)$ /index.php?lang=$1&pag=$2 [L]

设置语言、页面和子页面时

RewriteRule ^([a-zA-Z0-9'-_]+)/([a-zA-Z0-9'-_]+)/([a-zA-Z0-9'-_]+)$ /index.php?lang=$1&pag=$2&spag=$3 [L]

但是当语言未设置时,我无法访问子页面,何时必须是英语

 index.php?pag=services&spag=web_design
 RewriteRule ^([a-zA-Z0-9'-_]+)/([a-zA-Z0-9'-_]+)$ /index.php?pag=$2&spag=$3 [L]

知道如何让它工作吗?此外,如果您有将所有这一行合并为一行的想法,那就太好了。

谢谢!

据我了解,有人会以以下格式访问您的页面:

http://www.mysite.com/LANGUAGE/PAGE/SUBPAGE/

像这样:

http://www.mysite.com/ENGLISH/events/upcoming

将翻译为:

http://www.mysite.com/index.php?lang=ENGLISH&pag=events&spag=upcoming

哪个会把他们带到英文版的Events->Upcoming

溶液

假设上述是正确的。以下方法将起作用:

ReWriteRule ^(['w-]*)/*(['w-]*)/*(['w-]*)/*$ index.php?lang=$1&pag=$2&spag=$3
然后,在

index.php 中运行 var_dump($_GET) 将输出以下内容:

// http://www.mysite.com/ENGLISH/home/upcoming
array(3) {
  ["lang"]=>
  string(7) "ENGLISH"
  ["pag"]=>
  string(4) "home"
  ["spag"]=>
  string(8) "upcoming"
}

如果未设置,则将其作为零(如果在末尾将其留空)放在 url 中,如下所示:

http://www.mysite.com/0/home

这将给出:

array(3) {
  ["lang"]=>
  string(1) "0"
  ["pag"]=>
  string(4) "home"
  ["spag"]=>
  string(0) ""
}

示例网址

http://www.mysite.com/ENGLISH/news/recent/
http://www.mysite.com/ENGLISH/about/
http://www.mysite.com/ENGLISH/
http://www.mysite.com/0/news/recent/
http://www.mysite.com/0/about/
http://www.mysite.com/0/

次序

您也可以更改顺序...所以语言排在最后:

ReWriteRule ^(['w-]*)/*(['w-]*)/*(['w-]*)/*$ index.php?lang=$3&pag=$1&spag=$2

并使用如下网址:

http://www.mysite.com/news/recent/ENGLISH
http://www.mysite.com/about/history/
http://www.mysite.com/about
您可以使用

以下规则:

# just language
RewriteRule ^([a-z]{2})/?$ /index.php?lang=$1 [L,NC,QSA]
# just page
RewriteRule ^(['w-]{3,})/?$ /index.php?pag=$1 [L,QSA]
# lang & page
RewriteRule ^([a-z]{2})/(['w-]+)/?$ /index.php?lang=$1&pag=$2 [L,QSA,NC]
# page & spage
RewriteRule ^(['w-]{3,})/(['w-]+)/?$ /index.php?pag=$1&spag=$2 [L,QSA]
# lang, page & spage
RewriteRule ^([a-z]{2})/(['w-]+)/(['w-]+)/?$ /index.php?lang=$1pag=$2&spag=$3 [L,QSA,NC]