ট্রেডিং টিল্ডসের সাথে ওয়ার্ডপ্রেস মিলছে ইউআরএল


11

আমাকে দুর্বলতার প্রতিবেদন (1) হস্তান্তর করা হয়েছে যা দেখে বোঝা যাচ্ছে যে ওয়ার্ডপ্রেস নিম্নলিখিত টিল্ডগুলির সাথে ইউআরএল পরিচালনা করে এমনভাবে কোনও সুরক্ষা সমস্যা থাকতে পারে। মনে হচ্ছে স্ক্যানার মনে করে যে ওয়েবসাইটটি হয়ত কিছু ডিরেক্টরি তালিকা এবং সেগুলি সরবরাহ করে।

আমি অবাক হয়ে গিয়েছিলাম যে আমার ওয়েবসাইটটি এখনও সেই বিভিন্ন ইউআরএলতে সামগ্রী সরবরাহ করে, তাই আমি একটি সম্পূর্ণ ফাঁকা ডাব্লুপি ইনস্টল করে একটি পরীক্ষা করেছি, "পোস্টের নাম" পারমালিঙ্কগুলিতে স্যুইচ করেছি এবং নিশ্চিত যে হ্যাঁ, যোগ টিলডের সাথে কোনও ইউআরএল এখনও ততই ব্যাখ্যা করা যায় টিলড ছাড়া URL টি।

প্রকৃতপক্ষে, এর মতো একটি ইউআরএল:

https://mywordpresssite.com/my-permalink

নিম্নলিখিত URLS এর সাথেও অ্যাক্সেসযোগ্য:

https://mywordpresssite.com/my-permalink~
https://mywordpresssite.com/my-permalink~/
https://mywordpresssite.com/my-permalink~~~~~~

আমি দেখতে যেখানে ডাব্লু পার্মালিনক্স parses একটি সামান্য বিট কাছাকাছি poked, এবং আমি নিচে এটা ট্র্যাক class-wp.phpমধ্যে parse_requestপদ্ধতি, কিন্তু যে চেয়ে আরও অনেক পাই নি।

আমার প্রশ্ন হ'ল এটি যদি ডব্লিউপি-র জন্য আচরণের উদ্দেশ্যে হয় এবং যদি তাই হয় তবে টিল্ডস মেলে না এমন কোনও উপায় আছে কি আমি এটিকে বন্ধ করতে পারি? ডাব্লুপি কেন টিল্ডসের সাথে ইউআরএলকে URL ছাড়াই তাদের ব্যাখ্যা করবে?

(1) হ্যাঁ, এখন আমরা সকলেই যুক্তরাজ্যে বেশ কয়েকটি বড় বড় হ্যাক এবং ডেটা ফাঁস দেখেছি, আবারও সেই সময় যেখানে "সুরক্ষা" ছেলেরা আমাদের বিকাশকারীদের 200-পৃষ্ঠার স্ক্যান রিপোর্টগুলি হস্তান্তর করে তাদের বিটটি করছে বলে ভান করে where ভ্রান্ত-ইতিবাচক এবং জেনেরিক ইস্যুতে ভরপুর তারা প্রত্যাশার বিষয়ে কিছুই জানে না আমরা যদি বলার রিপোর্টটি পড়ে কাজ করি তবে খারাপ কিছু কখনই ঘটবে না।

উত্তর:


13

সহজ সরল যাক

আমি যদি ওপিকে ভালভাবে বুঝতে পারি তবে আপনার সমস্যাটি হ'ল টিলডযুক্ত ইউআরএলগুলি একেবারেই মিলছে।

অন্যান্য সমস্ত উত্তর এই প্রশ্নের উপর দৃষ্টি নিবদ্ধ করে যে কোয়েরির জন্য স্যানিটাইজেশন কিছুটা অক্ষর বের করে দেয় ক্যোরিটি সম্পাদন করার আগে, তবে কোনও পরিস্থিতিতে কিছুটা পুনর্লিখনের নিয়মটি মেলে না তা রোধ করতে সক্ষম হওয়া উচিত।

এবং এটি করণীয়, খুব সহজ নয়, তবেযোগ্য।

কেন এটি প্রথম স্থানে মিলছে?

একই সাথে পুনর্লিখনের নিয়মের সাথে দুটি ইউআরএল পছন্দ example.com/postnameএবং example.com/postname~মিলে যাওয়ার কারণ হ'ল পোস্টগুলির জন্য ডাব্লুপি পুনর্লিখনের নিয়ম পুনর্লিখনের নিয়ম তৈরি হওয়ার সময় পুনরায় %postname%রাইটিং ট্যাগ ব্যবহার করে যা রেজেক্স দ্বারা প্রতিস্থাপন করা হয় ([^/]+)

সমস্যাটি হ'ল রেজেক্স ([^/]+)পোস্টের সাথেও মেলে postname~এবং স্যানিটাইজেশনের কারণে, অনুসন্ধান করা নামটি postnameএকটি বৈধ ফলাফলের সাথে শেষ হবে।

এর মানে যদি আমরা থেকে Regex পরিবর্তন করতে পারবেন ([^/]+)করার ([^~/]+)তাই আমরা সক্রিয়ভাবে পোস্টে নামে টিল্ড ধারণকারী URL গুলি প্রতিরোধ টিল্ড আর মেলে না হবে মিলেছে করা হবে।

যেহেতু কোনও নিয়ম মেলে না, ইউআরএল 404 হয়ে যাবে, যা প্রত্যাশিত আচরণ হওয়া উচিত, আমি মনে করি।

মিলে যাওয়া রোধ করুন

add_rewrite_tagএটি এমন একটি ফাংশন যা এর নাম থাকা সত্ত্বেও একটি বিদ্যমান পুনরায় লেখার ট্যাগটি আপডেট করতে ব্যবহার করা যেতে পারে %postname%

সুতরাং, যদি আমরা কোডটি ব্যবহার করি:

add_action('init', function() {
  add_rewrite_tag( '%postname%', '([^~/]+)', 'name=' );
});

আমরা আমাদের লক্ষ্য পৌঁছবে এবং example.com/postname~হবে না জন্য নিয়মের সাথে মেলা example.com/postname

সুতরাং, হ্যাঁ, উপরের 3 টি লাইনই কেবল আপনার প্রয়োজনীয় কোড

তবে এটি কাজ করার আগে আপনাকে ব্যাকএন্ডে পারমালিঙ্ক সেটিংস পৃষ্ঠাতে গিয়ে পুনর্লিখনের নিয়মগুলি ফ্লাশ করতে হবে ush

মনে রাখবেন যে রেজেক্স টিল্ডকে ([^~/]+)পোস্টের নামে যে কোনও জায়গায় থাকতেই কেবল আটকে রাখে না, কেবল পোস্টের নামগুলি স্যানিটাইজেশনের কারণে টিলড ধারণ করতে পারে না, এটি কোনও সমস্যা নয়।


1
সরলতার মতো +1 ;-) দেখেও মনে হচ্ছে আমরা অন্যান্য শব্দদলগুলির জন্য এটিও সামঞ্জস্য করতে পারি।
বার্জায়ার

1
@বীরগায়ার আমরা সবাই না? ;)
গাজাজ্যাপ

@ বিবিরগায়ার হ্যাঁ, আমরা যে কোনও চরিত্র ছিনিয়ে নিতে পারি তা রোধ করতে পারি sanitize_title, তবে যেহেতু এটি ফিল্টারযোগ্য, তাই সর্বদা কার্যকর বৈধ সমাধান লেখা সম্ভব নয়। সুতরাং আমি নির্দিষ্ট গিয়েছিলাম।
গাজাজ্যাপ

1
এই উত্তরটির এখনও পর্যন্ত সবচেয়ে পরিষ্কার সমাধান রয়েছে এবং আমরা যে সমস্যার মুখোমুখি হচ্ছি তা স্পষ্ট করে ব্যাখ্যা করে। অনেক অনেক ধন্যবাদ - আপনাকে অনুগ্রহ!
dken

7

ডব্লিউপি-র জন্য উদ্দেশ্যমূলক আচরণ

হ্যাঁ, ইতিমধ্যে বর্ণিত হিসাবে, একক পোস্টের পোস্টের নামটি স্যানিটাইজ করতে WP_Query::get_posts()ব্যবহার করে sanitize_title_for_query()( যা ব্যবহার করেsanitize_title() )।

সংক্ষেপে, পোস্টের নামটি পেরিয়ে যাওয়ার পরে sanitize_title_for_query(), my-permalink === my-permalink~~~যেমন sanitize_title_for_query()অনুসরণটি সরানো হয় ~~~। আপনি নিম্নলিখিতটি দ্বারা এটি পরীক্ষা করতে পারেন:

echo  sanitize_title_for_query( 'my-permalink~~~' )

টিল্ডস মেলে না তাই কোনওভাবেই আমি এটি বন্ধ করতে পারি

এটি এমন কিছু নয় যা আপনি স্যুইচ অফ করতে পারেন। sanitize_title()নামে পরিচিত একটি ফিল্টার রয়েছে sanitize_titleযা আপনি ব্যবহারের আচরণ পরিবর্তন করতে ব্যবহার করতে পারেন sanitize_title()তবে এটি প্রায়শই খুব ভাল ধারণা নয়। এসকিউএল ইঞ্জেকশনটি অত্যন্ত গুরুতর, সুতরাং খারাপ স্যানিটেশনের কারণে ফাটলগুলি দিয়ে কিছু স্লিপ করা আপনার সাইটের অখণ্ডতার উপর সত্যই খারাপ প্রভাব ফেলতে পারে। "ওভার স্যানিটেশন" কখনও কখনও বাটের ব্যথা হতে পারে।

আপনি কী পরে আছেন তা আমি নিশ্চিত নই, তবে আমার সন্দেহ হয় যে আপনি সম্ভবত এই কথায় চলন্ত টিলড সহ 404 টি একক পোস্ট করতে চান, আপনার কথায়, "এটি বন্ধ করুন"। এই পর্যায়ে আমি কেবলমাত্র ভাবতে পারি তা হল প্রধান জিজ্ঞাসাটি থামানো যখন আমাদের কাছে এই পেছনের টিल्ड রয়েছে। এর জন্য, আমরা posts_whereমূল ক্যোয়ারির ধারাটি ফিল্টার করতে পারি ।

ফিল্টার

দ্রষ্টব্য: আমি কেবলমাত্র একক পোস্টগুলি বিবেচনা করেছি এবং স্থির সম্মুখ পৃষ্ঠাগুলি বা সংযুক্তিগুলি নয়, আপনি এটি অন্তর্ভুক্ত করতে ফিল্টারটি প্রসারিত করতে পারেন

add_filter( 'posts_where', function ( $where, \WP_Query $q )
{
    // Only apply the filter on the main query
    if ( !$q->is_main_query() )
        return $where;

    // Only apply the filter on singular posts
    if ( !$q->is_singular() )
        return $where;

    // We are on a singular page, lets get the singular post name
    $name = sanitize_title_for_query( $q->query_vars['name'] );

    // Suppose $name is empty, like on ugly permalinks, lets bail and let WorPress handle it from here
    if ( !$name )
        return $where;

    // Get the single post URL
    $single_post_url = home_url( add_query_arg( [] ) );
    $parsed_url      = parse_url( $single_post_url );

    // Explode the url and return the page name from the path
    $exploded_pieces = explode( '/',  $parsed_url['path'] );
    $exploded_pieces = array_reverse( $exploded_pieces );

    // Loop through the pieces and return the part holding the pagename
    $raw_name = '';
    foreach ( $exploded_pieces as $piece ) {
        if ( false !== strpos( $piece, $name ) ) {
            $raw_name = $piece;

            break;
        }
    }

    // If $raw_name is empty, we have a serious stuff-up, lets bail and let WordPress handle this mess
    if ( !$raw_name )
        return $where;

    /**
     * All we need to do now is to match $name against $raw_name. If these two don't match,
     * we most probably have some extra crap in the post name/URL. We need to 404, even if the
     * the sanitized version of $raw_name would match $name. 
     */
    if ( $raw_name === $name )
        return $where;

    // $raw_name !== $name, lets halt the main query and 404
    $where .= " AND 0=1 ";

    // Remove the redirect_canonical action so we do not get redirected to the correct URL due to the 404
    remove_action( 'template_redirect', 'redirect_canonical' );

    return $where;
}, 10, 2 );

কয়েকটি নোট

আমাদের মত ইউআরএল থাকলে উপরের ফিল্টারটি 404 পৃষ্ঠা ফেরত দেবে https://mywordpresssite.com/my-permalink~~~~~~। তবে আপনি remove_action( 'template_redirect', 'redirect_canonical' );ফিল্টার থেকে অপসারণের মাধ্যমে কোয়েরিটি স্বয়ংক্রিয়ভাবে https://mywordpresssite.com/my-permalinkএকক পোস্টে পুনঃনির্দেশিত এবং প্রদর্শন করতে পারেন redirect_canonical()যার কারণে ওয়ার্কপ্রেস template_redirect404 এর পুনঃনির্দেশ পরিচালিত ওয়ার্ডপ্রেসের পুনঃনির্দেশ পরিচালনা করে


7

হ্যাঁ এটি আশ্চর্যজনক বলে মনে হচ্ছে যে এর জন্য আমাদের একই মিল থাকা উচিত:

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()ফিল্টারগুলি এড়াতে এবং প্রতিস্থাপন করতে সরাসরি ব্যবহার করা আরও ভাল be

$parts = array_map( 'sanitize_title_for_query', $parts );

সঙ্গে:

foreach( $parts as &$part )
{
    $part = sanitize_title_with_dashes( $part, '', 'query' );
}

PS: আমি মনে করি add_query_arg( [] )@ গাজাজাপ ;-) থেকে খালি দিয়ে বর্তমান পথটি পেতে, আমি এই কৌশলটি শিখেছি, এটি কোডেক্সেও লক্ষ্য করা গেছে। পুনঃনির্দেশের esc_url()আউটপুট প্রদর্শন করার সময় add_query_arg( [] )বা ব্যবহারের অনুস্মারকটির জন্য আবার @ গ্যামাজাপেপকে ধন্যবাদ esc_url_raw()। এর জন্য আগের কোডেক্স রেফারেন্সটিও পরীক্ষা করে দেখুন।


+1 কেবল স্পষ্ট করে বলতে গেলে, সেই বিশেষ চরিত্রগুলি মুছে ফেলা হবে, সুতরাং, যদিও ইউআরএলটির অদ্ভুত সংস্করণটি অবস্থান বারে দৃশ্যমান হয়, ওয়ার্ডপ্রেস আসল ইউআরএল নিয়ে কাজ করে, যার কারণে অনুরোধটি প্রথম স্থানে কাজ করে। আমি সেই আচরণের সাথে কোনও মেয়র সুরক্ষা ঝুঁকি দেখছি না।
নিকোলাই

1
হ্যাঁ আমি মনে করি আমাদের এই @ialocin পরিবর্তন করার জন্য স্যানিটেশন ফিল্টারটি নিয়ে গণ্ডগোল করা উচিত নয়
বার্জায়ার

1
অবশ্যই, খুব ভাল কারণ না থাকলে এটি কোনও ঝামেলা এটির পক্ষে উপযুক্ত নয়। বলা বাহুল্য, এটি সম্ভবত বিকাশকারীদের পক্ষে অসম্পূর্ণতার জন্য ভাল নয় - এমনকি প্রযুক্তিগত স্যানিটেশনটিতে না not যদিও আমার দুই সেন্ট।
নিকোলাই

1
@ বিবিরগায়ার যখন ব্যবহার করা হয় তখন সুরক্ষার সমস্যাগুলি add_query_argসহ পালাতে esc_urlবা esc_url_rawরোধ করা দরকার ...
গাজাজাপ

হ্যাঁ হ্যাঁ ধন্যবাদ, আমি যদি সঠিকভাবে মনে করি তবে এটি বেশিরভাগ প্লাগইনে সম্প্রতি সিকিউরিটি সমস্যাটি আবিষ্কার হয়েছিল
@

3

আমাকে ওয়ার্ডপ্রেসটির 'অনুরোধের প্রক্রিয়াজাতকরণ, এবং ওয়ার্ডপ্রেস পরিবর্তন করার একটি পদ্ধতি' বর্ণনা অনুসারে আপনার লক্ষ্যগুলি সম্পাদন করতে পারি।

অনুরোধটি পার্স করা হচ্ছে

ওয়ার্ডপ্রেস কোনও অনুরোধ পেলে এটি অনুরোধটি ছড়িয়ে দেওয়ার এবং এটি একটি পৃষ্ঠায় রূপান্তর করার প্রক্রিয়া শুরু করে। এই প্রক্রিয়াটির মূলটি শুরু হয় যখন ওয়ার্ডপ্রেস মূল ক্যোয়ারী পদ্ধতি WP::main()বলা হয়। এই ফাংশনটি parse_request()(ইন includes/class-wp.php) -তে আপনি সঠিকভাবে সনাক্ত হিসাবে, ক্যোয়ারিকে পার্স করেছে । সেখানে, ওয়ার্ডপ্রেস পুনরায় লেখার নিয়মের একটির সাথে URL মিলানোর চেষ্টা করে । যখন ইউআরএলটি ম্যাচ করা হয়, তখন এটি ইউআরএল অংশগুলির একটি কোয়েরি স্ট্রিং তৈরি করে এবং urlencode()বিশেষ অক্ষর যেমন &ক্যোরির স্ট্রিং গণ্ডগোল থেকে বিরত রাখার জন্য বিশেষ অক্ষরগুলি রোধ করে এই অংশগুলি (দুটি স্ল্যাশের মধ্যে সমস্ত কিছু) এনকোড করে । এই এনকোডযুক্ত অক্ষরগুলির কারণে আপনার মনে হতে পারে যে সমস্যাটি সেখানেই রয়ে গেছে, তবে ক্যোয়ারীর স্ট্রিংটিকে বিশ্লেষণ করার সময় এগুলি প্রকৃতপক্ষে তাদের সম্পর্কিত "প্রকৃত" অক্ষরগুলিতে পরিণত হয়েছে।

অনুরোধের সাথে সম্পর্কিত ক্যোয়ারী চালানো হচ্ছে

ওয়ার্ডপ্রেস ইউআরএল পার্স করার পরে এটি মূল ক্যোয়ারী ক্লাস সেট আপ করে WP_Query, যা ক্লাসের একই main()পদ্ধতিতে করা হয় WP। এর গোশতটি WP_Queryতার get_posts()পদ্ধতিতে পাওয়া যাবে যেখানে সমস্ত ক্যোয়ারী আর্গুমেন্টগুলি পার্স এবং স্যানিটাইজ করা হয় এবং আসল এসকিউএল কোয়েরিটি নির্মিত হয় (এবং শেষ পর্যন্ত চালানো হয়)।

এই পদ্ধতিতে, 2730 লাইনে, নিম্নলিখিত কোডটি কার্যকর করা হয়:

$q['name'] = sanitize_title_for_query( $q['name'] );

এটি পোস্ট সারণী থেকে পোস্ট আনার জন্য এটি স্বাস্থ্যকর করে। লুপের অভ্যন্তরে আউটপুটটিং ডিবাগ তথ্যটি দেখায় যে সমস্যাটি এখানেই রয়েছে: আপনার পোস্টের নাম,, my-permalink~রূপান্তরিত হয় my-permalinkযা ডেটাবেস থেকে পোস্ট আনতে ব্যবহৃত হয়।

পোস্ট শিরোনাম স্যানিটাইজেশন ফাংশন

ফাংশনটি সঠিক পরামিতিগুলির সাথে sanitize_title_for_queryকল করে sanitize_title, যা শিরোনাম স্যানিটাইজ করতে এগিয়ে যায়। এখন এই ফাংশনের মূলটি sanitize_titleফিল্টার প্রয়োগ করছে :

$title = apply_filters( 'sanitize_title', $title, $raw_title, $context );

এই ফিল্টার, নেটিভ ওয়ার্ডপ্রেস, একটি একক ফাংশন এটি সংযুক্ত করেছেন: sanitize_title_with_dashes। আমি এই ফাংশনটি কী করে তার একটি বিস্তৃত ওভারভিউ লিখেছি, যা এখানে পাওয়া যাবেএই ফাংশনে, লাইনটি যা আপনার সমস্যার কারণ হতে পারে

$title = preg_replace('/[^%a-z0-9 _-]/', '', $title);

এই রেখাটি বর্ণানুক্রমিক অক্ষর, স্পেস, হাইফেন এবং আন্ডারস্কোর ব্যতীত সমস্ত অক্ষরকে আলাদা করে ফেলে।

আপনার সমস্যা সমাধান করা

সুতরাং, আপনার সমস্যা সমাধানের মূলত একটি উপায় রয়েছে: sanitize_title_with_dashesফিল্টার থেকে ফাংশনটি সরিয়ে ফেলা এবং এটি আপনার নিজের ফাংশন দ্বারা প্রতিস্থাপন। এটি করা এতটা কঠিন নয়, তবে :

  1. ওয়ার্ডপ্রেস যখন স্যানিটাইজিং শিরোনামগুলির অভ্যন্তরীণ প্রক্রিয়া পরিবর্তন করে, তখন এটি আপনার ওয়েবসাইটে বড় প্রভাব ফেলবে।
  2. এই ফিল্টারটিতে আবদ্ধ হওয়া অন্যান্য প্লাগইনগুলি নতুন কার্যকারিতাটি সঠিকভাবে পরিচালনা করতে পারে না।
  3. সর্বাধিক গুরুত্বপূর্ণ : ওয়ার্ডপ্রেস সরাসরি এই লাইন দ্বারা এসকিউএল কোয়েরিতে sanitize_titleফাংশনটির ফলাফল ব্যবহার করে :

    $where .= " AND $wpdb->posts.post_name = '" . $q['name'] . "'";

    আপনি যদি কখনও ফিল্টার পরিবর্তন করার বিষয়টি বিবেচনা করেন তবে নিশ্চিত হয়ে নিন যে ক্যোয়ারীতে এটি ব্যবহারের আগে আপনি শিরোনামটি সঠিকভাবে এড়িয়ে গেছেন!

উপসংহার: আপনার সমস্যার সমাধান যতক্ষণ না সুরক্ষা সম্পর্কিত, তবে এটি sanitize_title_with_dashesআপনার নিজের কার্যকারিতাটি প্রতিস্থাপন এবং এসকিউএল পলায়নের দিকে মনোযোগ দেওয়া উচিত it

এনবি সমস্ত ফাইলের নাম এবং লাইন নম্বর ওয়ার্ডপ্রেস ৪.৪.২ ফাইলের সাথে মিলে যায়।


3

কিছু লোক ইতিমধ্যে সমস্যাটি ব্যাখ্যা করেছে, তাই আমি কেবল একটি বিকল্প সমাধান পোস্ট করব। বেশ স্ব-ব্যাখ্যামূলক হওয়া উচিত।

add_action( 'template_redirect', function() {
    global $wp;

    if ( ! is_singular() || empty( $wp->query_vars['name'] ) )
        return;

    if ( $wp->query_vars['name'] != get_query_var( 'name' ) ) {
        die( wp_redirect( get_permalink(), 301 ) );
        // or 404, or 403, or whatever you want.
    }
});

আপনি যদিও, যেহেতু হায়ারারকিকাল পোস্ট ধরনের জন্য কিছু একটু ভিন্ন করতে হবে WP_Queryচালানো হবে pagenameমাধ্যমে wp_basenameতাই এবং তারপর এটি sanitize, query_vars['pagename']এবং get_query_var('pagename')শিশুদের জন্য মিলছে না হবে becuase আধুনিক পিতা বা মাতা অংশ থাকবে না।

আমি চাই redirect_canonicalএই খালুর যত্ন নেওয়া উচিত।


0

এটি ওয়ার্ডপ্রেস বাগ জাস্টের জন্য ওয়ার্ডপ্রেস জেনারেটেড ব্লকের উপরের শুরু সুরক্ষা মোড ব্লকটি ঠিক করুন ...

# BEGIN security mod
<IfModule mod_rewrite.c>
RewriteRule ^.*[~]+.*$ - [R=404]
</IfModule>
#END security mod

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>

# END WordPress

-3

আপনি সর্বদা আপনার .htaccessফাইলটিতে নিম্নলিখিতগুলি যুক্ত করার চেষ্টা করতে পারেন :

RewriteEngine On
RewriteRule \.php~$  [forbidden,last]

উপরের দ্বিতীয় লাইনটি প্রথম দেখানো প্রথম লাইনের নীচে যেতে হবে। এটি index.php~ইউআরএল প্রদর্শিত হতে আটকা উচিত ।


প্রশ্নটি প্রায় উত্তেজনাপূর্ণ জন্য কাজ করে না, তাই না?
নিকোলাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.