مباراة علامة استفهام في التعابير المنطقية حكم mod_rewrite و

StackOverflow https://stackoverflow.com/questions/822421

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا أتطلع لكتابة عناوين المواقع مع سلاسل فرعية متعددة. يتم طلب واحد فرعية كما فرعي، في حين يطلب من أي أشخاص آخرين كمعلمات سلسلة الاستعلام العادية.

وعلى سبيل المثال، وأود أن إعادة كتابة عناوين المواقع من

http://www.mysite.com/mark/friends?page=2

إلى

http://www.mysite.com/friends.php?user=mark&page=2

وأنا قادرة على تحقيق ذلك باستثناء حرف علامة الاستفهام. هنا هو بلدي قاعدة إعادة الكتابة:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L]

إذا قمت بتغيير علامة الاستفهام إلى أي حرف آخر يعمل كبيرة. ويبدو أن المشكلة هي أن '؟ يتم تفسير الطابع بشكل غير صحيح بداية سلسلة استعلام جديدة.

وأحتاج لتمرير أية معلمات التي تظهر بعد / المستخدم / أصدقاء كما هو. كيف يمكنني تحقيق ذلك؟

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

المحلول

ويجب أن تكون باستخدام العلامة [QSA] بدلا من محاولة لإعادة كتابة سلسلة الاستعلام. [QSA] يمر على سلسلة الاستعلام إلى URL إعادة كتابة.

وهكذا القاعدة يجب أن تبدو:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends/? friends.php?user=$1 [QSA,L]

وقضيتك هي مشابهة جدا ل المثال المعطى لاستخدام العلم جهاز الإحصاء في mod_rewrite وكتاب طبخ .

نصائح أخرى

الاستعلام ليس جزءا من مسار URL، وبالتالي لا يمكن أن يكون معالجة مع RewriteRule التوجيه . لا يمكن إلا أن يتم ذلك مع RewriteCond التوجيه (انظر %{QUERY_STRING} ).

ولكن كما قال تشاد بيرش بالفعل في هذا الشأن يكفي وضع عشر من QSA العلم للحصول تلقائيا الأصلي المطلوب استعلام إلحاق URL الجديد.

في بالإضافة إلى استخدام جهاز الإحصاء كتابة العلم، ويمكنك أيضا استخدام متغير البيئة QUERY_STRING كما هو مبين أدناه:

RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends$ /friends.php?user=$1&%{QUERY_STRING}

وعلى URL في مسألة

http://www.example.com/mark/friends?page=2
سيتم إعادة كتابة

ل(كما هو محدد):

http://www.example.com/friends.php?user=mark&page=2
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top