处理.htaccess中的语言

时间:2015-10-14 17:49:59

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

我想解决下一个问题:

1)输入没有语言的网址时,默认使用英语 例如:

  

http // localhost / plants /或http // localhost / plants

  

HTTP //本地主机/植物/店铺/配件

2)输入带语言的网址时,将该参数作为要使用的语言传递 例如:

  

http // localhost / plants / es / shop / accessories

  

http // localhost / plants / es /或http // localhost / plants / es

到目前为止,我已经尝试过:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(en|es)/(.*)$ index.php?url=$2&lang=$1 [L,QSA]

RewriteRule ^(.*)$ index.php?url=$1&lang=en [L,QSA]

如果我评论第一个RewriteRule并输入任何url它工作正常但总是使用en语言。

如果我评论第二个RewriteRule,我使用的语言为:

  

http // localhost / plants / es /

  

http // localhost / plants / es / shop / accessories

它工作正常,但没有给出默认语言为英语。

当我离开这两条规则时,知道为什么它不起作用?

由于

Ps:我已经删除了:在http

之后

3 个答案:

答案 0 :(得分:2)

如果plants是您的文档根目录,那么您应该可以使用此规则。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]

RewriteCond %{REQUEST_URI} !/(en|es)
RewriteRule ^(.*)/?$ index.php?url=$1&lang=en [L,QSA]
RewriteRule ^(en|es)/?(.*)/?$ index.php?url=$2&lang=$1 [L,QSA]

让我知道它对你有用。

答案 1 :(得分:1)

将以下htaccess文件放在RewriteEngine On RewriteBase /plants RewriteCond %{REQUEST_URI} !^/plants/e[ns](/|$) [NC] RewriteCond %{QUERY_STRING} !lang=e[ns] [NC] RewriteRule ^.*$ /plants/en/$0 [R=301,L] RewriteRule ^(e[ns])/(.*)$ index.php?url=$2&lang=$1 [NC,L,QSA] 目录中:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]

RewriteRule ^(en|es)/(.*)$ index.php?url=$2&lang=$1 [L,QSA]
RewriteRule ^(.*)$ index.php?url=$1&lang=en [L,QSA]

如果上述情况仍然无效,请将您自己的方法更新为:

http://localhost:8000/auth/login#_=_

答案 2 :(得分:1)

找到了解决方案:

  

RewriteEngine On

     

RewriteCond%{REQUEST_FILENAME}!-f

     

RewriteCond%{REQUEST_FILENAME}!-d

     

RewriteCond%{REQUEST_FILENAME}!-l

     

RewriteRule ^(en | es)/(。*)$ index.php?url = $ 2& lang = $ 1 [L,QSA]

     

RewriteCond%{REQUEST_FILENAME}!-f

     

RewriteCond%{REQUEST_FILENAME}!-d

     

RewriteCond%{REQUEST_FILENAME}!-l

     

RewriteRule ^(。*)$ index.php?url = $ 1& lang = en [L,QSA]

我该如何改进?感觉不对,我必须写两次相同的Cond