Intereting Posts
Пользовательский обмен для страницы администрирования меню? Предотвращать переполнение страницы из-за вмешательства в постоянную ссылку для архива по умолчанию? Множественные пользователи – позволяют им управлять своими собственными терминами для пользовательской таксономии при входе в систему Страница как страница архива Могу ли я использовать front-page.php и index.php? Можно ли изменить правила CSS для комментариев Disqus? Активированный плагин хранится как объект, а не как путь Между функциями.php, виджетами и плагинами, которые загружаются первыми? $ reverse_top_level работает противоположным образом в соответствии с Codex? Как перебирать основные категории? ? login = не удалось подключиться только к URL при определенных обстоятельствах Тайм-аут на Admin-Ajax? Удаление виджетов темы по умолчанию Показать родительскую категорию и подкатегорию Магазин WooCommerce с ~ 30 000 продуктами

Как установить адрес ipv6 как siteurl?

Я пытаюсь установить ipv6 ip-адрес как домашний и URL-адрес сайта, но кажется, что он не работает отлично.

Оттуда: http://[2001:da8:d800:71::250]/wordpress/ (если вы просматриваете источник), мы видим, что некоторый URL-адрес, такой как pingback (строка 16), где правильно, но другие, такие как rss (строка 20) были потеряны [ и ] , как это исправить? (если у меня нет домена, указывающего на этот адрес ipv6.)

Solutions Collecting From Web of "Как установить адрес ipv6 как siteurl?"

Я думаю, что ваша проблема здесь заключается в функции esc_url (), которая используется для дезинфекции большого количества URL-адресов, используемых в wp-core.

Если вы посмотрите на определение функции в файле formatting.php, вы увидите, что регулярное выражение в строке 2627 отфильтровывается [ и ] .

Но, к счастью, вы также можете увидеть, что в строке 2656 есть фильтр, который позволяет вам переписать это поведение. Таким образом, вы сможете исправить это, clean_url специальную функцию в фильтр clean_url .


** EDIT2 * *

Кажется, что URL-адреса переадресации дезинфицируются в другой функции. К счастью, это подключаемая функция , поэтому мы можем ее перезаписать. Я отредактировал код, чтобы принять это во внимание. Вы можете использовать следующий фрагмент кода, создав папку 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; 

(Предыдущий код из функции. Php можно удалить.)