【问题标题】:.htaccess for language detection, redirecting + clean urls.htaccess 用于语言检测、重定向 + 干净的 url
【发布时间】:2014-01-30 09:54:17
【问题描述】:

我对 .htaccess 不是很熟悉,但我设法将以下文件放在一起。可悲的是它不起作用..

它必须做什么: - 检测用户是否是法语 = 重定向到 example.com/fr - 检测用户是否是任何其他语言 = 重定向到 example.com/nl - 显示所有不带 .html 和 .php 的网址

这是我用于语言检测的代码,但它会循环..

    RewriteEngine on
    RewriteCond %{HTTP:Accept-Language} (fr) [NC]
    RewriteRule .* http://www.example.com/fr [R,L]
    RewriteRule .* http://www.example.com/nl [R,L]

这是我为干净网址提供的代码,但它仅适用于 .html,我需要 .html 和 .php

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.+)$ $1.html [L,QSA]

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
    RewriteRule ^(.*)\.html$ /$1 [R=301,L]

那么我如何让这两个工作,并放在同一个文件中?问候。

【问题讨论】:

标签: .htaccess loops redirect language-detection


【解决方案1】:

您需要检查您是否已经在/fr//nl/ 目录中:

RewriteEngine on
RewriteCond %{HTTP:Accept-Language} (fr) [NC]
RewriteRule ^(?!fr/)(.*)$ http://www.example.com/fr/$1 [R,L]
RewriteRule ^(?!nl/)(.*)$ http://www.example.com/nl/$1 [R,L]

然后你只需要为 html 和 php 复制你的规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.(php|html)($|\?|\ )
RewriteRule ^(.*)\.(php|html)$ /$1 [R=301,L]

【讨论】:

  • 我如何将两段代码放在一起?那我试试看。
  • 所以我尝试使用此代码,但我得到一个无限循环..浏览器转到 example.com/nl/nl/nl/nl/nl/......等等上
猜你喜欢
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多