在功能PHP检查,非尾随斜线URL重定向到结尾的斜线网址(PHP check in a functi

2019-10-29 02:26发布

我控制分页WordPress的内容和重定向的URL编号其父URL的功能。

该功能可以正常使用,但我想的是,为编号的网址没有最后结尾的斜线,火灾301重定向直接到结尾的斜线网址。 例如:

https://www.example.com/how-to-do-something/1111

应立即重定向到

https://www.example.com/how-to-do-something/

目前,而不是重定向301是工作,但通过对https://www.example.com/how-to-do-something再到https://www.example.com/how-to-do-something/

但是, 与此同时 ,这种检查不应该用失效最后结尾的斜线编号的URL,这已经很好了,例如:

https://www.example.com/how-to-do-something/1111/重定向完美的https://www.example.com/how-to-do-something/在一杆。 因此,有什么也不做这些。

功能如下:

global $posts, $numpages;

 $request_uri = $_SERVER['REQUEST_URI'];

 $result = preg_match('%\/(\d)+(\/)?$%', $request_uri, $matches);

 $ordinal = $result ? intval($matches[1]) : FALSE;

 if(is_numeric($ordinal)) {

     // a numbered page was requested: validate it
     // look-ahead: initialises the global $numpages

     setup_postdata($posts[0]); // yes, hack

 $redirect_to = isset($ordinal) ? '/': (($ordinal > $numpages) ? "/$numpages/" : FALSE);

     if(is_string($redirect_to)) {

         // we got us a phantom
         $redirect_url = get_option('home') . preg_replace('%'.$matches[0].'%', $redirect_to, $request_uri);

         // redirect to it's parent 301
             header($_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently');

         header("Location: $redirect_url");
         exit();

     }
 }

我如何能实现从非尾随斜线网址这个PHP检查直接斜线,而不调用,我必须强迫结尾的斜线htaccess的规则? 感谢您的耐心和时间。

Answer 1:

WordPress的有一个功能,增加了一个结尾的斜线:

trailingslashit($string);


Answer 2:

在你的代码再次寻找有一些事情不加起来:

  1. 该生产线$redirect_to = isset($ordinal) ? '/': (($ordinal > $numpages) ? "/$numpages/" : FALSE); $redirect_to = isset($ordinal) ? '/': (($ordinal > $numpages) ? "/$numpages/" : FALSE); 总是返回'/' ,因为$序是if语句中始终设置。

  2. 请问“家”选项返回一个URL以斜杠? 确保你所需要的“trailingslashit”功能,即trailingslashit(get_option('home'))

  3. 总的来说,我会有点不同处理这个。 这就是我会做(填写免费将其更改为你的需求):

$request_uri = $_SERVER['REQUEST_URI'];

$uriParts = explode('/', trim($request_uri, '/'));

$ordinal = array_pop($uriParts);

if (is_numeric($ordinal)) {
  setup_postdata($posts[0]);
  $redirect_url = trailingslashit(get_option('home')) . implode('/', $uriParts) . '/';
  header($_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently');
  header("Location: $redirect_url");
  exit();
}

希望这可以帮助。



文章来源: PHP check in a function to redirect a non-trailing slash URL to trailing slash URL