.png. $extension = preg_match( '/\.[A-Za-z0-9]{1,10}$/', $segment, $match ) ? $match[0] : ''; $stem = substr( $segment, 0, strlen( $segment ) - strlen( $extension ) ); if ( self::looks_like_id( $segment ) || ( '' !== $extension && self::looks_like_id( $stem ) ) ) { return '/:id/*'; } $file = 1 === count( $parts ) && '/' !== substr( (string) $path, -1 ) && '' !== $extension && '' !== $stem; return $file ? '/' . $segment : '/' . $segment . '/*'; } /** * Digits, a UUID, long hex or token-like strings, anything with @, % or * spaces, or over 32 characters. * * @param string $segment Decoded segment. * @return bool */ private static function looks_like_id( $segment ) { return strlen( $segment ) > 32 || preg_match( '/[@%\s]/', $segment ) || preg_match( '/^\d[\d_.-]*$/', $segment ) || preg_match( '/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i', $segment ) || preg_match( '/^[0-9a-f]{12,}$/i', $segment ) || ( preg_match( '/\d/', $segment ) && preg_match( '/^[A-Za-z0-9_-]{16,}$/', $segment ) ) || ! preg_match( '/^[A-Za-z0-9._~-]+$/', $segment ); } }