Custom URL redirect in WP

时间:2018-09-04 作者:Nicolaesse

我正在尝试为外部链接创建自己的重定向页面。

My target

我的目标是,当用户打开链接时www.mysite.com/wp/GoTo/?URL=www.google.com, 浏览器打开页面www.google.com

What I have done

我保存了以下内容GoTo.php 文件夹中的文件wp-content/themes/theme-name/:

<?php


/*
Template Name: GoTo
*/

/**
 * The template for displaying all pages.
 *
 * This is the template that displays all pages by default.
 * Please note that this is the WordPress construct of pages
 * and that other \'pages\' on your WordPress site will use a
 * different template.
 *
 * @package theme-name
 */

$url = $_GET["URL"];

// Remove all illegal characters from a url
$url = filter_var($url, FILTER_SANITIZE_URL);

if (filter_var($url, FILTER_VALIDATE_URL) !== true) {
    header("location: " . $url);
    exit;
} else {
echo("$url is not a valid URL");
}
?>
然后我创建了一个带有URL的页面www.mysite.com/wp/GoTo/ 带模板GoTo.

目前:

如果我打开www.mysite.com/wp/GoTo/?URL=xyz 我收到404错误(如果我打开www.mysite.com/wp/GoTo/?URL=www.google.com 我得到一个404错误(而不是打开google.com)如何修复此问题?不幸的是,我不能直接引用php页面。换句话说,我不能在浏览器中写字www.mysite.com/wp/wp-content/themes/theme-name/Z_GoTo.php?URL=www.google.com, 因为mod rewrite包含反对它的规则。

Disclamer

我知道WP中有几个关于重定向的问题,但没有一个是关于我这样的情况。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

此表达式存在问题:

filter_var($url, FILTER_VALIDATE_URL) !== true
应该或可以写为:

filter_var($url, FILTER_VALIDATE_URL)
因为PHPmanual 对于filter_var() 表示:

返回过滤后的数据,或FALSE 如果过滤器出现故障。

也就是说,使用有效的URL,filter_var() 不返回布尔值;因此filter_var($url, FILTER_VALIDATE_URL) !== true 从不计算为false. 一、 e.所有URL都将被视为有效。

所以完整的代码,没有注释:

$url = $_GET["URL"];

// Remove all illegal characters from a url
$url = filter_var($url, FILTER_SANITIZE_URL);

if (filter_var($url, FILTER_VALIDATE_URL)) {
    header("location: " . $url);
    exit;
} else {
    echo("$url is not a valid URL");
}
附加说明要重定向到外部URL/域,需要指定协议&mdash;e、 g。http://. 在下面尝试header() 代码,您会理解它:

Code #1:

// Has the protocol; this would always redirect to http://www.google.com
header( \'Location: http://www.google.com\' );
exit;

Code #2:

// Protocol not specified; redirects to a URL on your site. For example,
// if you\'re on http://your-site.com/path, then you\'d be redirected to
// http://your-site.com/path/www.google.com
header( \'Location: www.google.com\' );
exit;

结束

相关推荐

redirect to a custom page

我已经创建了一个插件插件替换“添加到购物车”按钮,弹出“继续”按钮。对于店主选择的每一种产品我希望在单击按钮时将用户重定向到我的自定义页面。我需要页面将显示不同产品id的不同内容。我应该将页面放在插件文件夹中的什么位置?如何重定向到它?我需要该页面将使用商店主题,例如,我希望该页面将显示产品页面的原样,通过获取url中的产品id…代码是用id替换按钮的功能。function replacing_add_to_cart_button( $button, $product ) { $produc