【问题标题】:htaccess language conditional redirecthtaccess 语言条件重定向
【发布时间】:2016-11-29 19:33:24
【问题描述】:

我需要在我的 htaccess 中进行重定向,具体取决于 url 中是否存在语言代码。

网址结构应以域开头,后跟语言代码,然后是特定页面(与任何常规网站一样)

domain.com/zh/section/subsection/

如您所见,/en/ 是语言代码,但可能有不同的语言代码 [/en/es/it/]

所以规则应该如下:

  • 语言代码必须存在且长度必须为 2 个字符

如果此规则不匹配,浏览器应重定向到默认语言“/en/”

在我的脑海里是这样的......只是在我的脑海里;)

RewriteCond %{REQUEST_URI} !^/([az]){2}/(.*)$
RewriteRule ^(.*)$ /en/$1 [L]

提前致谢

【问题讨论】:

    标签: php .htaccess redirect mod-rewrite regex-negation


    【解决方案1】:

    您的正则表达式似乎不正确,您可以在 RewriteRule 本身中执行此操作:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule !^[a-z]{2}/ /en%{REQUEST_URI} [R=301,L]
    

    【讨论】:

    • 谢谢@anubhava。我知道我的正则表达式错了呵呵,只是想弄清楚。您的方法似乎是一个好的开始,但是,由于有更多可能的语言代码,最好是动态的,所以我不需要把它们都放好。这就是为什么我在想像 [az]{2} 之类的东西,知道吗?再次感谢!
    • 好的,你的方法终于奏效了,但必须添加两件事: - 301 重定向标志 - 避免所有不应重定向的文件@anubhava 的条件,它工作得很好。我会将您的答案标记为正确答案,并将添加最终代码。如果需要,您可以使用最终代码更新您的答案,因此对其他人来说仍然是正确的。谢谢!!!!
    • 好吧,我们也可以跳过文件/目录,而不是否定所有文件扩展名,就像在最新更新中一样。请检查并告诉我。
    【解决方案2】:

    在@anubhava 的帮助下,这段代码终于发挥了作用。 谢谢!!

    RewriteCond %{REQUEST_URI} !^(.+)\.(js|css|png|jpe?g|gif|eot|woff2?|ttf|otf|svg|json|txt|xml|html?|htc|ico|m4a|m4v|manifest|mp4|mp3|oex|oga|ogg|ogv|otf|pdf|swf|fla|safariextz|svgz?|vcf|webapp|webm|webp|xpi)$ [NC]
    RewriteRule !^[a-z]{2}/ /en%{REQUEST_URI} [R=301,L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      相关资源
      最近更新 更多