【问题标题】:Redirect website to inner links将网站重定向到内部链接
【发布时间】:2016-10-28 01:32:08
【问题描述】:

我有一个具有这种结构的多语言网站http://www.url.com/en/http://www.url.com/it/http://www.url.com/pt/ 等。 我现在的问题是,当您访问链接 url.com 时,我将有 3 个重定向。

  1. http://url.com
  2. http://www.url.com
  3. http://www.url.com/en/

如何才能只有 2 个重定向?如果您访问http://url.com 以重定向到http://www.url.com/en/ 在我的 htaccess 文件中,我有这行。

RewriteCond %{HTTP_HOST} ^url.com [NC]
RewriteRule ^(.*)$ http://www.url.com/$1 [L,R=301]

这个从 url.com 重定向到 http://www.url.com。重定向后,一个 php 文件脚本识别了该域,并再次重定向到 /en/

$url= strpos($_SERVER['REQUEST_URI'],"/".$lang."/");
if($url!==0){ Header( "HTTP/1.1 301 Moved Permanently" ); 
Header( "Location: http://www.url.com/en/" );  }

之后我有一些条件可以检查你是否使用其他语言。

if($lang == "pt"){$langcheck = "pt"}

我的链接是这样创建的:

RewriteRule ^([_A-Za-z0-9-]+)\/$ index.php?page=index&lang=$1 [L]

那么我应该在 htaccess 中写什么来为每种语言工作。因为如果我将 RewriteRule 更改为 url.com/en/,其他语言将不再起作用。

【问题讨论】:

  • 对不起,我无法理解您如何获取语言以及如何重定向。
  • 当您进入 url.com 时,如果 URL 与 url.com/en/ 不同,我会检查 functions.php。如果不同,我会重定向到 URL url.com/en/。只有当您访问链接 url.com 时才会出现这种情况,但如果您键入 url.com/it/,我会看到还有另一种语言。我的问题是当您访问 url.com 时(我想第一次被重定向到 url.com/en/,而不是 www.url.com,然后是 www.url.com/en/。跨度>

标签: php .htaccess redirect


【解决方案1】:

如何实现这一点取决于您从哪里获取语言字符串、您想要支持多少种语言以及这种交互应该有多复杂。

如果它只是几种语言,并且您想为此使用浏览器设置,您可以使用htaccess rewrites 来完成此操作。

但是,如果您有多种语言,希望让用户在网站本身中选择他们自己的语言,或者比上述更复杂的语言。那么,您需要在 PHP 中完成所有操作。
这意味着删除丢失的“www”域的 htaccess 重定向,然后在 PHP 代码中检查它。在检查所选语言之前或之后。在实际重定向之前,使用这两项检查来确定要重定向到的链接。

元示例:

// We want all users to use the domain with www.
$redir = '';
if (substr ($url, 0, 3)) != 'www') {
    $redir .= 'www.';
}

// If user has selected a different language, we need to redirect for that too.
if (!empty ($lang)) {
    $redir .= "{$base_url}/{$lang}/";
}

// If $redir isn't empty, redirect the user.
// PS: Always remember to use `die()` after a `header()` redirect!

【讨论】:

  • 谢谢!我已经测试并从 htaccess 中删除了重定向,并且第一个字节工作正常,但在我的内部链接中不起作用(正在使用 url.com/innerl 和 www.url.com/innerl)。我的网站为所有链接进行重定向需要做很多工作。我正在尝试使用 htaccess 找到一种方法。
  • 您不需要使用 PHP 单独为所有链接进行重定向。您唯一需要的是与上面类似的东西,它测试对站点的所有请求。如果您有多个入口点,那么您只需将上述代码制作一个函数,将其包含在每个页面中并运行它即可。毕竟是干的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多