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/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。