سؤال

ها هو ملف .htaccess الخاص بي

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteRule subpage\?sid /index.php [R=301,L,NC]

طلبي هو http://example.com/subpage?sid

يستمر في إرجاع 404 غير موجود ، بدلاً من إعادة التوجيه إلى index.php

لقد حاولت عدم الهروب من؟ وتغيير الطلب إلى http://example.com/subpage\?sid

لقد جربت الكثير من الأشياء لمحاولة الحصول على هذا العمل ولكني الآن متعثر.

هل كانت مفيدة؟

المحلول

Query_String ليس جزءًا من URI. من الوثائق إعادة كتابة:

ملاحظة: سلسلة الاستعلام

ال نمط لن يتم مطابقتها مع سلسلة الاستعلام. بدلاً من ذلك ، يجب عليك استخدام إعادة كتابة مع %{QUERY_STRING} عامل.

كما يقول المستند ، ستحتاج إلى استخدام إعادة كتابة ، شيء مثل:

RewriteCond %{QUERY_STRING} (^|&)sid([&=]|$) [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]

إذا كان ٪ {query_string} حقًا ليس خيارًا ، فحاول:

# Apache is supposed to use PCRE, but doesn't seem to like "\\s"
RewriteCond %{THE_REQUEST} subpage?sid[^!-~] [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]

وأيضًا ، لا تحتاج أبدًا إلى إعادة الكتابة أثناء استخدامك ("rewriteBase /"). التعليق على الخط واختبره للتأكد ، ولكن من المحتمل أن تجد أنه يمكنك حذفه دون أي تأثير سيء.

نصائح أخرى

ربما تحتاج إلى التحقق من إعداد VirtualHost لموقعك وتعيين إعداد ALMEROVERRIDE للدليل المقابل؟

<Directory /var/www/vhosts/some_host>
     ....
     AllowOverride All
</Directory>

إليك المزيد حول Apache's السماح بالتجاوز

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top