代码之家  ›  专栏  ›  技术社区  ›  MePo

.htaccess,如何组合语言并将语言添加到路径

  •  1
  • MePo  · 技术社区  · 6 年前

    .htaccess .

    .htaccess访问 :

    RewriteEngine on
    RewriteRule (.*) web/$1 [L]
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    

    我该如何组合这些?现在只有第一条规则有效 web/$1 .

    还有,我怎样才能添加一个额外的重定向到所有这些语言?

    为了澄清我想做什么:

    • 用户写入 example.com 因为我的索引文件在 /web 当然,它去那里了(这是有效的)

    • 现在它应该把他引向 www.example.com

    • 在那之后加上 /en 使其看起来像 www.example.com/en -还不知道。

    1 回复  |  直到 6 年前
        1
  •  1
  •   MrWhite    6 年前

    主要问题是指令的顺序不对。你应该是 www.example.com 之前 重写 web/<whatever> .

    RewriteEngine on
    
    # Redirect example.com to www.example.com
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    
    # Internally rewrite to "web" subdirectory.
    RewriteRule (.*) web/$1 [L]
    

    我想你还有一个 .htaccess /web 子目录,否则最后一个指令将导致重写循环。

    在那之后加上 /en 使其看起来像 www.example.com/en

    之前 web 子目录。我想你可能会要求 www.example.com/<page> www.example.com/en/<page> ?

    RewriteEngine on
    
    # Redirect example.com to www.example.com
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=302,L]
    
    # Redirect to "/en" if not already present at the start of the URL
    RewriteCond %{REQUEST_URI} !^/en/
    RewriteRule (.*) http://%{HTTP_HOST}/en/$1 [R=302,L]
    
    # Internally rewrite to "web" subdirectory.
    RewriteRule (.*) web/$1 [L]
    

    这个 RewriteCond 指令检查URL路径是否( ! /en/ 在重定向之前。