그렇습니다.
example.tld/2016/03/29/test/
그리고 예
example.tld/2016/03/29/..!!$$~~test~~!!$$../
이것이 가능한 이유가 될 것 같습니다 이 부분 의 WP_Query::get_posts()
방법 :
if ( '' != $q['name'] ) {
$q['name'] = sanitize_title_for_query( $q['name'] );
여기서 sanitize_title_for_query()
다음과 같이 정의됩니다.
function sanitize_title_for_query( $title ) {
return sanitize_title( $title, '', 'query' );
}
sanitize_title
필터 를 사용하여이를 더 엄격하게 만들 수 는 있지만 sanitize_title_with_dashes
여기에서 위생을 담당 하는 기본 출력을 무시하는 것은 좋지 않을 수 있습니다. 이 동작에 대한 최신 정보가 없으면 티켓을 변경하는 대신 티켓을 만드는 것이 좋습니다.
최신 정보
현재 경로에서 노이즈를 sanitize_title_for_query()
정리하고 필요한 경우 정리 된 URL로 리디렉션 할 수 있는지 궁금 합니다.
테스트 사이트에서 플레이하고 필요에 따라 조정할 수있는 데모는 다음과 같습니다.
/**
* DEMO: Remove noise from url and redirect to the cleaned version if needed
*/
add_action( 'init', function( )
{
// Only for the front-end
if( is_admin() )
return;
// Get current url
$url = home_url( add_query_arg( [] ) );
// Let's clean the current path with sanitize_title_for_query()
$parse = parse_url( $url );
$parts = explode( '/', $parse['path'] );
$parts = array_map( 'sanitize_title_for_query', $parts );
$path_clean = join( '/', $parts );
$url_clean = home_url( $path_clean );
if( ! empty( $parse['query'] ) )
$url_clean .= '?' . $parse['query'];
// Only redirect if the current url is noisy
if( $url === $url_clean )
return;
wp_safe_redirect( esc_url_raw( $url_clean ) );
exit;
} );
sanitize_title_with_dashes()
필터를 피하고 교체하기 위해 직접 사용하는 것이 더 좋습니다 .
$parts = array_map( 'sanitize_title_for_query', $parts );
와:
foreach( $parts as &$part )
{
$part = sanitize_title_with_dashes( $part, '', 'query' );
}
추신 : 나는 add_query_arg( [] )
@gmazzap에서 empty를 가진 현재 경로를 얻기 위해이 트릭을 배웠다고 생각합니다 .-) 이것은 Codex 에도 언급 되어 있습니다. esc_url()
출력을 표시 add_query_arg( [] )
하거나 esc_url_raw()
예를 들어 리디렉션 할 때 사용하도록 상기시켜주는 @gmazzap에게 다시 감사드립니다 . 이전 코덱스 참조도 확인하십시오.