如何将IPv6地址设置为站点URL?

时间:2013-11-02 作者:van abel

我曾尝试将ipv6 ip地址设置为主页和站点url,但似乎效果并不理想。

从那里开始:http://[2001:da8:d800:71::250]/wordpress/ (如果查看源代码)我们看到一些url,例如pingback (第16行)如果正确,但其他,如rss (第20行)丢失[], 如何修复此问题?(如果我没有指向此ipv6地址的域。)

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

我想你的问题是esc_url() 函数,用于清理wp核心中使用的大量URL。

如果查看中的函数定义formatting.php 您将看到第2627行中的正则表达式正在过滤掉[].

但幸运的是,您还可以看到,在第2656行中提供了一个过滤器,允许您覆盖此行为。因此,您可以通过将自定义函数附加到clean_url 滤器


**EDIT2 **

重定向URL似乎在另一个函数中被清除。幸运的是,这是一个pluggable function, 所以我们可以覆盖它。我编辑了代码以考虑到这一点。您可以通过创建mu-plugins 文件夹中的文件夹wp-content 文件夹并放置一个PHP文件(我将其命名为我的fix_ipv6_siteurl.php) 在该文件夹中。

<?php

add_filter(\'clean_url\', \'wpse_120978_custom_esc_url\', 10, 3);

function wpse_120978_custom_esc_url( $url, $original_url, $_context ) {

    if( !strpos($original_url, \'[\') ) {
        return $url;
    }

    $url = $original_url;

    if ( \'\' == $url )
            return $url;
    $url = preg_replace(\'|[^a-z0-9-[]~+_.?#=!&;,/:%@$\\|*\\\'()\\\\x80-\\\\xff]|i\', \'\', $url);
    $strip = array(\'%0d\', \'%0a\', \'%0D\', \'%0A\');
    $url = _deep_replace($strip, $url);
    $url = str_replace(\';//\', \'://\', $url);
    /* If the URL doesn\'t appear to contain a scheme, we
        * presume it needs http:// appended (unless a relative
        * link starting with / or a php file).
        */
    if ( strpos($url, \':\') === false &&
            substr( $url, 0, 1 ) != \'/\' && substr( $url, 0, 1 ) != \'#\' && !preg_match(\'/^[a-z0-9-]+?\\.php/i\', $url) )
            $url = \'http://\' . $url;

    // Replace ampersands and single quotes only when displaying.
    if ( \'display\' == $_context ) {
            $url = wp_kses_normalize_entities( $url );
            $url = str_replace( \'&amp;\', \'&#038;\', $url );
            $url = str_replace( "\'", \'&#039;\', $url );
    }

    if ( !is_array($protocols) )
            $protocols = array (\'http\', \'https\', \'ftp\', \'ftps\', \'mailto\', \'news\', \'irc\', \'gopher\', \'nntp\', \'feed\', \'telnet\', \'mms\', \'rtsp\', \'svn\');
    if ( wp_kses_bad_protocol( $url, $protocols ) != $url )
            return \'\';

    return $url;
}


if ( !function_exists(\'wp_sanitize_redirect\') ) :
/**
 * Sanitizes a URL for use in a redirect.
 *
 * @since 2.3
 *
 * @return string redirect-sanitized URL
 **/
function wp_sanitize_redirect($location) {
    $location = preg_replace(\'|[^a-z0-9-[]~+_.?#=&;,/:%!]|i\', \'\', $location);
    $location = wp_kses_no_null($location);

    // remove %0d and %0a from location
    $strip = array(\'%0d\', \'%0a\', \'%0D\', \'%0A\');
    $location = _deep_replace($strip, $location);
    return $location;
}
endif;
(可以删除functions.php中以前的代码。)

结束

相关推荐

如何在WordPress中包含调整大小的javascript/jQuery图像?

我不想在我的wordpress主题中包含此脚本,使其根据当前窗口高度调整帖子内所有图像的大小:https://github.com/gutierrezalex/photo-resize我在文本编辑器中创建了一个基本的测试页面,它可以很好地调整图像的大小。然而,当我试图将其应用/包括在我的wordpress主题中时,我根本无法使其发挥作用。