Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将网站重定向到内部链接_Php_.htaccess_Redirect - Fatal编程技术网

Php 将网站重定向到内部链接

Php 将网站重定向到内部链接,php,.htaccess,redirect,Php,.htaccess,Redirect,我有一个具有这种结构的多语言网站http://www.url.com/en/,http://www.url.com/it/,http://www.url.com/pt/等。 我现在的问题是,当你访问链接url.com时,我将有3个重定向 到http://url.com 到http://www.url.com 到http://www.url.com/en/ 我怎样才能只有2个重定向?如果您访问http://url.com重定向到http://www.url.com/en/ 在我的htaccess文

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

  • 到<代码>http://url.com
  • 到<代码>http://www.url.com
  • 到<代码>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/
    ,其他语言将不再工作。

    如何实现这一点取决于语言字符串的来源、要支持的语言数量以及交互的复杂程度

    如果只是两种语言,并且您希望使用浏览器设置来实现此目的,那么您可能可以使用

    但是,如果您有不止几种语言,您希望让用户在站点本身中选择自己的语言,或者选择比上述语言更复杂的语言。好吧,那么你需要用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!
    

    如何实现这一点取决于从何处获取语言字符串、要支持多少种语言以及此交互的复杂性

    如果只是两种语言,并且您希望使用浏览器设置来实现此目的,那么您可能可以使用

    但是,如果您有不止几种语言,您希望让用户在站点本身中选择自己的语言,或者选择比上述语言更复杂的语言。好吧,那么你需要用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!
    

    很抱歉,我无法获取它。您如何获取语言以及如何重定向。当您输入url.com时,如果url与url.com/en/不同,我将检查functions.php。如果不同,我将重定向到URL.com/en/。仅当您访问url.com链接,但键入url.com/it/时,才会出现此情况。我发现还有另一种语言。我的问题是当你访问url.com时(我想第一次被重定向到url.com/en/,而不是www.url.com,然后再重定向到www.url.com/en/。很抱歉,我无法理解您如何获取语言以及如何重定向。当您进入url.com时,如果url与url.com/en/不同,我将进入functions.php。如果不同,我将重定向到url.com/en/.t他的情况是只有当你访问url.com链接时,但是如果你键入url.com/it/我发现还有另一种语言。我的问题是当你访问url.com时(我想第一次被重定向到url.com/en/,而不是www.url.com,然后再重定向到www.url.com/en/。谢谢!我已经测试并删除了htaccess的重定向,第一个字节工作正常,但我的内部链接不工作(正在与www.url.com/innerl一起工作)。对我的网站来说,对所有链接进行重定向需要做很多工作。我正在尝试用htaccess找到一种方法来实现这一点。你不需要用PHP对所有链接进行单独重定向。你唯一需要做的是类似于上面的东西,它会测试对网站的所有请求。如果你有多个入口点,那么n您可以利用上述代码创建一个函数,将其包含在每个页面中并运行。毕竟是DRY。谢谢!我已经测试并删除了htaccess的重定向,第一个字节工作正常,但我的内部链接不工作(与www.url.com/innerl一起工作)。对我的网站来说,对所有链接进行重定向需要做很多工作。我正在尝试用htaccess找到一种方法来实现这一点。你不需要用PHP对所有链接进行单独重定向。你唯一需要做的是类似于上面的东西,它会测试对网站的所有请求。如果你有多个入口点,那么n您只需利用上述代码创建一个函数,将其包含在每个页面中,然后运行它。毕竟,是DRY。