سؤال

أنا أستخدم ISAPI أعد كتابة 3 (Mod إعادة كتابة استنساخ IIS) ومحاولة إعادة كتابة عناوين URL بناء على سلسلة الاستعلام - ثم قم بتمرير جزءا من سلسلة الاستعلام هذه في إعادة كتابة.

لذلك إذا أدخلت عنوان URL مثل هذا: /test/home.cfm؟ page=default&arbitraryextraarg=123.

أريد إعادة كتابة ذلك على النحو التالي: /test/index.cfm؟page=home&arbitraryextraarg=123.

لدي الحالة / القاعدة التالية:

RewriteCond %{QUERY_STRING} ^page=default(.*)$ [I]
RewriteRule ^/test/home.cfm$ /test/index.cfm?page=home%1 [I,R=301]

ولكن لم يتم تمرير متغيرات سلسلة الاستعلام الإضافية. يبدو أن٪ 1 فارغة.

هذه هي الطريقة التي تشير إلى تطابق نمط من RewriteCond، أليس كذلك؟

ما أنا في عداد المفقودين هنا؟

شكرا!

تحرير: يبدو لي مثل إعادة تجاهل إعادة الترتيب بالكامل. إليك ما يشبهه Logfile:

[snip] (2) init rewrite engine with requested uri /test/home.cfm?page=default
[snip] (1) Htaccess process request C:\Inetpub\wwwroot\dev\IsapiRewrite\httpd.conf
[snip] (3) applying pattern '^/test/home\.cfm$' to uri '/test/home.cfm'
[snip] (1) escaping /test/index.cfm?page=home 
[snip] (2) explicitly forcing redirect with http://www.devsite.com/test/index.cfm?page=home
[snip] (2) internal redirect with /test/home.cfm?page=default [INTERNAL REDIRECT]

[snip] (2) init rewrite engine with requested uri /test/index.cfm?page=home
[snip] (1) Htaccess process request C:\Inetpub\wwwroot\dev\IsapiRewrite\httpd.conf
[snip] (3) applying pattern '^/test/home\.cfm$' to uri '/test/index.cfm'

يجب أن يكون هناك ذكر تسجيل نمط إعادة الترتيب هناك؟

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

المحلول

ولكن لم يتم تمرير متغيرات سلسلة الاستعلام الإضافية. يبدو أن٪ 1 فارغة.

٪ 1 فارغ لأنه وفقا لسجل الطلب الذي تقوم به هو /test/home.cfm؟page=Default - بدون المعلمة الثانية.

قد يكون تفاجض المعالجة RewRiteCond في السجل يرجع إلى انخفاض rewriteloglelvel.

وينبغي أن يكون التكوين:

RewriteCond٪ {Query_String} ^ صفحة = الافتراضي (. +) $ [NC

إعادة كتابة ^ / test / home.cfm $ /test/index.cfm؟page=home٪1 [NC، R = 301، L

نصائح أخرى

أعتقد أن إعادة كتابة ISAPI مختلفة قليلا عن mod_rewrite:

كلما قمت بوضع الأقواس في أي تعبير منتظم موجود في قاعدة معقدة (قاعدة مع شروط)، فأنت بمناسبة طاعون يمكن استخدامه بطريقة تنسيق (باستخدام $N بناء جملة) أو كمرجع خلفي (باستخدام \N بناء جملة) في الظروف اللاحقة. هذه الحاضر عالمية للقاعدة المعقدة بأكملها (إعادة التلاوة التوجيه والموافق rewritecond. التوجيهات). يتم ترقيم الطواق من أعلى إلى أسفل ومن اليسار إلى اليمين البدء من الأول rewritecond. التوجيه (إذا كان هذا التوجيه موجود) المقابلة إعادة التلاوة.

لذا حاول $1 للحصول على مباراة المجموعة الأولى بغض النظر عن المكان الذي يظهر فيه:

RewriteCond %{QUERY_STRING} ^page=default(.*)$ [I]
RewriteRule ^/test/home\.cfm$ /test/index.cfm?page=home$1 [I,R=301]

isapi إعادة كتابة 3. يبدو أن أكثر توافقا مع MOD_REWRITE أباتشي.

أعتقد أن هذا يعمل أيضا:

RewriteRule ^/test/home.cfm\?page=default(.*)$ /test/index.cfm?page=home%1 [I,R=301]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top