Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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 将尾部斜杠添加到url_Php_Mod Rewrite - Fatal编程技术网

Php 将尾部斜杠添加到url

Php 将尾部斜杠添加到url,php,mod-rewrite,Php,Mod Rewrite,我正在尝试使用PHP向URL添加一个尾随斜杠。mod_rewrite无法完成此操作,因为我在.htaccess中有类似的功能: RewriteRule ^page/(.*)$ index.php?page=$1 [L] 我想用斜杠验证301重定向之前页面是否存在 现在,我在验证后使用以下代码: if(substr($_GET['page'], -1) !== '/') header('Location: http://example.com/'.$_GET['page'].'/'.$_SE

我正在尝试使用PHP向URL添加一个尾随斜杠。mod_rewrite无法完成此操作,因为我在.htaccess中有类似的功能:

RewriteRule ^page/(.*)$ index.php?page=$1 [L]
我想用斜杠验证301重定向之前页面是否存在

现在,我在验证后使用以下代码:

if(substr($_GET['page'], -1) !== '/')
  header('Location: http://example.com/'.$_GET['page'].'/'.$_SERVER['QUERY_STRING'],TRUE,301);

但是有更好的方法吗?

您已经有了最好的解决方案。我将只使用
$\u服务器['REQUEST\u URI']
而不是已经解析的
$\u GET['page']
$\u服务器['QUERY\u STRING']

if (substr($_GET['page'], -1) !== '/') {
    $parts = explode('?', $_SERVER['REQUEST_URI'], 2);
    $uri = 'http://example.com'.$parts[0].'/'.(isset($parts[1]) ? '?'.$parts[1] : '');
    header('Location: '.$uri, true, 301);
    exit;
}

简单的方法是删除url末尾的斜杠(如果可用),然后添加它

$str = "http://yoursite.com/testpage"; 

OR 

$str = "http://yoursite.com/testpage/";


echo rtrim($str,"/").'/';

这是我的通用解决方案,希望对某人有所帮助:

 $site_adress = (((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
$whole_url = $site_adress . $_SERVER['REQUEST_URI'];


$pos = strpos($whole_url, "?");
$changed_url = FALSE;
if($pos !== FALSE && $whole_url[$pos - 1] != "/") {
    $whole_url = substr_replace($whole_url, "/", $pos, 0);
    $changed_url = TRUE;
} else if($pos == FALSE && substr($whole_url, -1) != '/') {
    $whole_url = $whole_url . "/";
    $changed_url = TRUE;
}
if($changed_url) {
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: " . $whole_url);
    exit();
}

我不明白你可以把它作为一个mod重写吗?我不想为不存在的页面添加尾部斜杠,例如example.com/page/fokwaofkw变成example.com/page/fokwaofkw/那么你如何检查请求的资源的存在性呢?假设请求是
/page/1
,实际上是
/index.php?page=1
,我需要验证页面“1”是否存在于我的数据库中,然后再使用后续的slash重定向。通常,您可以使用apache重写条件进行此操作。但是,如果您坚持只为坚持
页面
的URL添加斜杠,那么您只能在验证页面存在性后在代码中执行此操作。为什么不直接使用$\u服务器['REQUEST\u URI']而不使用explode()?这不应该产生相同的结果吗?@Ibrahim Ashshoail:
$\u服务器['REQUEST\u URI']
包含最初请求的URI路径和查询。使用
explode
可以在
分隔符处拆分它,将缺少的
/
放在URI路径的末尾,如果查询已经存在于最初请求的URI中,则重新追加查询。我的坏。。。我认为请求的URI应该是“pages/1/”,因此这首先就违背了目的谢谢,Gumbo。@Ibrahim AshShohail:实际上,mod_rewrite的请求URI与PHP的请求URI不同。这可能会引起一些混乱。你这只聪明的狗:-)谢谢@Mike Q;-)添加/不添加任何麻烦的最简单方法不适用于:$str=“”