تعديل إعادة كتابة كاملة befuzzlement [مغلق
-
05-07-2019 - |
سؤال
ها هو ملف .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 السماح بالتجاوز