
این سند در مورد پرچم هایی که در دسترس دستورالعمل Rewriterule هستند ، توضیح می دهد و توضیحات مفصلی را ارائه می دهد.

- معرفی
- B (فرار از برگه های فرار)
- BNP | backrefnoplus (از فضا به +فرار نکنید)
- ج | زنجیر
- CO | کوکی
- DPI | دور انداختن
- E | env
- پایان
- f | ممنوع
- ج | رفته
- ح | کنترل کننده
- L | آخرین
- n | بعدی
- NC | NOCASE
- ne | noescape
- ns | nosubreq
- P | پروکسی
- PT | گذرگاه
- qsa | qsappend
- qsd | qsdiscard
- qsl | qslast
- R | تغییر مسیر
- S | پرش
- T | نوع
همچنین ببینید
- مستند سازی ماژول
- مقدمه mod_rewrite
- تغییر مسیر و بازسازی
- کنترل دسترسی
- میزبان مجازی
- مجوز
- با استفاده از بازنویسی
- تکنیک های پیشرفته
- در صورت عدم استفاده از mod_rewrite
- نظرات
معرفی
یک بازنویسی می تواند رفتار خود را با یک یا چند پرچم اصلاح کند. پرچم ها در انتهای قانون در براکت های مربع گنجانده شده اند و چندین پرچم توسط کاما از هم جدا می شوند.
الگوی دوباره نوشتن [FLAG1 ، FLAG2 ، FLAG3]
هر پرچم (با چند استثناء) یک فرم کوتاه مانند CO و همچنین فرم طولانی تر مانند کوکی دارد. در حالی که استفاده از فرم کوتاه متداول است ، توصیه می شود که خود را با فرم طولانی آشنا کنید ، به گونه ای که به یاد دارید که هر پرچم قرار است چه کاری انجام دهد. برخی از پرچم ها یک یا چند استدلال می کنند. پرچم ها حساس نیستند.
پرچم هایی که ابرداده مرتبط با درخواست را تغییر می دهند (t = ، h = ، e =) هیچ تاثیری در زمینه در هر مرحله و htaccess ندارند ، هنگامی که یک تعویض (غیر از '-') در همان دور پردازش بازنویسی انجام می شود.
ارائه شده در اینجا هر یک از پرچم های موجود ، همراه با نمونه ای از نحوه استفاده از آنها است.
B (فرار از برگه های فرار)
پرچم [B] به نوشتن مجدد برای فرار از شخصیت های غیر آلفانومیک قبل از استفاده از تحول دستور می دهد.
Mod_Rewrite قبل از نقشه برداری باید URL های Unescape را انجام دهد ، بنابراین در زمان استفاده از آنها ، برگه های برگشتی از بین می روند. با استفاده از پرچم B ، شخصیت های غیر alphanumeric در BackReferences فراری می شوند. به عنوان مثال ، این قانون را در نظر بگیرید:
نوشتن مجدد "^جستجو /(.*) $" "/search. php؟term= $1"
با توجه به اصطلاح جستجوی "x & y/z" ، یک مرورگر آن را به عنوان "x ٪ 20 ٪ 26 ٪ 20y ٪ 2FZ" رمزگذاری می کند ، و این درخواست را "جستجو/x ٪ 20 ٪ 26 ٪ 20y ٪ 2fz" می کند. بدون پرچم B ، این قانون بازنویسی نقشه را به "search. php؟ term = x & y/z" می رساند ، که یک URL معتبر نیست ، و بنابراین به عنوان search. php؟ term = x ٪ 20 & y ٪ 2fz رمزگذاری می شود.= ، که چیزی نیست که در نظر گرفته شده است.
با پرچم B تنظیم شده در همین قانون ، پارامترها قبل از انتقال به URL خروجی دوباره رمزگذاری می شوند و در نتیجه نقشه برداری صحیح به /search. php؟term=X٪20٪26٪20y٪2FZ انجام می شود.
نوشتن مجدد "^جستجو /(.*) $" "
توجه داشته باشید که برای به دست آوردن این مثال خاص نیز ممکن است نیاز به تنظیم AllowencodeDslashes داشته باشید ، زیرا HTTPD اجازه نمی دهد برش های رمزگذاری شده در URL ها باشد و در صورت دیدن یک 404 بازگردد.
این فرار به ویژه در یک وضعیت پروکسی ضروری است ، در صورتی که در صورت ارائه یک URL UNESCPED ، ممکن است Backend از بین برود.
جایگزینی برای این پرچم استفاده از بازنویسی برای ضبط در برابر ٪ است که رشته ها را به شکل رمزگذاری شده ضبط می کند.
در 2. 4. 26 و بعد ، می توانید با لیست آنها ، فرار از شخصیت های خاص در BackReferences را محدود کنید: [B =#؟ ؛]. توجه: شخصیت فضایی را می توان در لیست شخصیت ها برای فرار استفاده کرد ، اما شما باید کل آرگومان سوم نوشتن را نقل کنید و فضا نباید آخرین شخصیت در لیست باشد.
# فضاها و علائم سؤال. نوشتن مجدد "^جستجو /( .*) $" "
BNP | backrefnoplus (از فضا به +فرار نکنید)
پرچم [BNP] به بازنویسی دستور می دهد تا از شخصیت فضا در یک برگشتی به 20 ٪ 20 برسد و نه "+". مفید است که به جای رشته پرس و جو در مؤلفه مسیر استفاده شود.
این پرچم در نسخه 2. 4. 26 و بعد از آن موجود است.
ج | زنجیر
پرچم [C] یا [زنجیره ای] نشان می دهد که بازنویسی به قانون بعدی زنجیر شده است. یعنی اگر این قانون مطابقت داشته باشد ، طبق معمول پردازش می شود و کنترل به قانون بعدی حرکت می کند. با این حال ، اگر مطابقت نداشته باشد ، قانون بعدی و هر قانون دیگری که با هم زنجیر شده اند ، رد می شوند.
CO | کوکی
پرچم [CO] یا [کوکی] ، به شما امکان می دهد وقتی یک بازنویسی خاص مطابقت داشته باشد ، یک کوکی تنظیم کنید. این استدلال شامل سه قسمت مورد نیاز و پنج قسمت اختیاری است.
نحو کامل برای پرچم ، از جمله همه ویژگی ها ، به شرح زیر است:
اگر یک لفظی ":" شخصیت در هر یک از زمینه های کوکی مورد نیاز است ، یک نحو متناوب در دسترس است. برای انتخاب نحو متناوب ، "نام" کوکی باید با یک "؛" انجام شود. شخصیت و جداکننده های میدانی باید به عنوان "؛" مشخص شوند.
شما باید یک نام ، یک مقدار و دامنه را برای تنظیم کوکی اعلام کنید.
دامنه دامنه ای که می خواهید کوکی معتبر باشد. این ممکن است یک نام میزبان مانند www. example. com باشد ، یا ممکن است یک دامنه باشد ، مانند . example. com. این باید حداقل دو قسمت با یک نقطه از هم جدا شود. یعنی ممکن است صرفاً . com یا . NET نباشد. کوکی ها از این نوع توسط مدل امنیت کوکی ممنوع است.
شما ممکن است به صورت اختیاری مقادیر زیر را تنظیم کنید:
طول عمر زمان ادامه کوکی ، در عرض چند دقیقه. مقدار 0 نشان می دهد که کوکی فقط برای جلسه فعلی مرورگر ادامه خواهد یافت. اگر هیچ کدام مشخص نشده باشد ، این مقدار پیش فرض است. مسیر مسیر ، در وب سایت فعلی ، که برای آن کوکی معتبر است ، مانند/مشتریان/یا/پرونده ها/بارگیری/. به طور پیش فرض ، این بر روی / - یعنی کل وب سایت تنظیم شده است. در صورت تنظیم امنیت ، درست یا 1 ، امنیت فقط مجاز به ترجمه از طریق اتصالات Secure (HTTPS) باشد. httponly اگر روی httponly ، true یا 1 تنظیم شود ، کوکی مجموعه پرچم httponly را خواهد داشت ، به این معنی که کوکی برای کد جاوا اسکریپت در مرورگرهایی که از این ویژگی پشتیبانی می کنند غیرقابل دسترسی است. Samesite اگر روی هر چیزی غیر از False یا 0 تنظیم شود ، ویژگی Samesite روی مقدار مشخص شده تنظیم می شود. مقادیر معمولی هیچ ، آرام و سخت نیست. موجود در 2. 4. 47 و بعد.
این مثال را در نظر بگیرید:
RewriteEngine on Rewriterule "^/index . html" "-" [CO = FrontDoor: بله: . example. com: 1440:/]
در مثال ، این قانون درخواست را بازنویسی نمی کند. هدف بازنویسی "-" به mod_rewrite می گوید که درخواست را از طریق بدون تغییر منتقل کند. در عوض ، یک کوکی به نام "Frontdoor" را به مقدار "بله" تنظیم می کند. کوکی برای هر میزبان در دامنه . example. com معتبر است. قرار است در 1440 دقیقه (24 ساعت) منقضی شود و برای همه URI ها بازگردانده می شود.
DPI | دور انداختن
پرچم DPI باعث می شود که قسمت PATH_INFO URI بازنویسی شده دور ریخته شود.
این پرچم در نسخه 2. 2. 12 و بعد در دسترس است.
در زمینه هر مستقیم ، URI هر بازنویسی در برابر مقایسه مقادیر فعلی URI و PATH_INFO مقایسه می شود.
URI فعلی می تواند URI اولیه همانطور که توسط مشتری درخواست می شود ، نتیجه دور قبلی پردازش mod_rewrite یا نتیجه یک قانون قبلی در دور فعلی پردازش mod_rewrite باشد.
در مقابل ، PATH_INFO که قبل از هر قانون به URI پیوست می شود ، فقط مقدار PATH_INFO را قبل از این دور از پردازش Mod_Rewrite منعکس می کند. در نتیجه ، اگر بخش های بزرگی از URI در دستورالعمل های چند نسخه بازنویسی با یک تعویض مطابقت داشته باشند ، بدون توجه به اینکه کدام قسمت از URI از PATH_INFO فعلی آمده است ، URI نهایی ممکن است چندین نسخه از PATH_INFO داشته باشد.
از این پرچم در هر جایگزینی استفاده کنید که در آن PATH_INFO که ناشی از نقشه برداری قبلی این درخواست به سیستم فایل است ، مورد توجه نیست. این پرچم به طور دائم PATH_INFO ایجاد شده قبل از شروع این دور از پردازش Mod_Rewrite را فراموش می کند. PATH_INFO تا زمانی که دور فعلی پردازش mod_rewrite تکمیل نشود ، دوباره محاسبه نمی شود. قوانین بعدی در این دور از پردازش فقط نتیجه مستقیم تعویض ها را مشاهده می کند ، بدون اینکه هیچ گونه PATH_INFO ضمیمه شود.
E | env
با پرچم [E] یا [ENV] ، می توانید مقدار یک متغیر محیط را تنظیم کنید. توجه داشته باشید که ممکن است برخی از متغیرهای محیط پس از اجرای قانون تنظیم شوند ، بنابراین آنچه را که شما تنظیم کرده اید ، نادیده بگیرید. برای اطلاعات بیشتر در مورد نحوه عملکرد متغیرهای محیط ، به سند متغیرهای محیط مراجعه کنید.
نحو کامل برای این پرچم:
[e = var: val] [e =! var]
Val ممکن است حاوی BackReferences ($ n یا ٪ n) باشد که گسترش یافته است.
با استفاده از فرم کوتاه
می توانید متغیر محیط به نام VAR را به یک مقدار خالی تنظیم کنید.
اجازه می دهد تا یک متغیر محیط قبلی تنظیم شده به نام VAR را بازنویسی کنید.
متغیرهای محیطی می توانند در زمینه های مختلفی از جمله برنامه های CGI ، سایر دستورالعمل های بازنویسی یا دستورالعمل های CustomLog استفاده شوند.
مثال زیر یک متغیر محیطی به نام "تصویر" را به مقدار "1" تنظیم می کند اگر URI درخواست شده یک فایل تصویری باشد. سپس از آن متغیر محیط برای حذف این درخواست ها از ورود به سیستم استفاده می شود.
Rewriterule ". (png | gif | jpg) $" "-" [e = تصویر: 1] "log/access_log" customLog ترکیبی ENV =!
توجه داشته باشید که همین اثر را می توان با استفاده از SetEnvif بدست آورد. این تکنیک به عنوان نمونه ارائه می شود ، نه به عنوان یک توصیه.
پایان
با استفاده از پرچم [پایان] نه تنها دور فعلی پردازش بازنویسی (مانند [L]) خاتمه می یابد ، بلکه مانع از هرگونه پردازش بازنویسی بعدی در زمینه هر مرحله (HTACCESS) می شود.
این در مورد درخواست های جدید ناشی از تغییر مسیر خارجی صدق نمی کند.
f | ممنوع
با استفاده از پرچم [F] باعث می شود سرور یک کد وضعیت ممنوع 403 را به مشتری برگرداند. در حالی که همین رفتار را می توان با استفاده از دستورالعمل انکار انجام داد ، این امکان انعطاف پذیری بیشتری را در تعیین وضعیت ممنوعه فراهم می کند.
قانون زیر از بارگیری پرونده های . exe از سرور شما منع خواهد شد.
دوباره نوشتن " . exe" ""-"[f]
این مثال از نحو "-" برای هدف بازنویسی استفاده می کند ، به این معنی که URI درخواستی اصلاح نشده است. اگر می خواهید درخواست را منع کنید ، دلیلی برای بازنویسی به URI دیگری وجود ندارد.
هنگام استفاده از [F] ، یک [L] دلالت می کند - یعنی پاسخ بلافاصله بازگردانده می شود و هیچ قانون دیگری ارزیابی نمی شود.
ج | رفته
پرچم [G] سرور را وادار می کند تا با پاسخ وضعیت 410 را برگرداند. این نشان می دهد که منبعی در دسترس است ، اما دیگر در دسترس نیست.
مانند پرچم [F] ، شما به طور معمول هنگام استفاده از پرچم [G] از نحو "-" برای هدف بازنویسی استفاده خواهید کرد:
دوباره نوشتن "OldProduct" "-" [G ، NC]
هنگام استفاده از [G] ، یک [L] دلالت می کند - یعنی پاسخ بلافاصله بازگردانده می شود و هیچ قانون دیگری ارزیابی نمی شود.
ح | کنترل کننده
درخواست حاصل را مجبور می کند تا با کنترل کننده مشخص شده اداره شود. به عنوان مثال ، ممکن است از این موارد برای مجبور کردن تمام پرونده ها بدون پسوند پرونده توسط کنترل کننده PHP استفاده شود:
دوباره نوشتن "! .""-" [h = برنامه/x-httpd-php]
بیان منظم در بالا -! .- با هر درخواستی که حاوی لفظی نباشد مطابقت دارد. شخصیت.
این همچنین می تواند برای مجبور کردن کنترل کننده بر اساس برخی شرایط استفاده شود. به عنوان مثال ، قطعه زیر مورد استفاده در متن در هر سرور اجازه می دهد تا در صورت درخواست با پسوند . phps ، فایلهای PHP توسط MOD_PHP نمایش داده شوند:
Rewriterule "^(/منبع /.+ . php) S $" "$ 1" [H = Application/X-HTTPD-PHP-SOURCE]
عبارت منظم در بالا - ^(/منبع /.+ . php) s $ - با هر درخواستی که با/منبع شروع می شود/به دنبال آن 1 یا n کاراکتر به دنبال . phps به معنای واقعی کلمه مطابقت دارد. مراجعه کنندگان به عقب 1 دلار به مسابقه ضبط شده در پرانتز بیان منظم.
L | آخرین
پرچم [L] باعث می شود mod_rewrite جلوی پردازش مجموعه قانون را بگیرد. در اکثر زمینه ها ، این بدان معنی است که اگر این قانون مطابقت داشته باشد ، هیچ قانون دیگری پردازش نمی شود. این مطابق با آخرین دستور در Perl یا دستور BREAK در C. است. از این پرچم استفاده کنید تا نشان دهد که قانون فعلی باید بلافاصله بدون در نظر گرفتن قوانین بیشتر اعمال شود.
بنابراین مهم است ، اگر در یکی از این زمینه ها از دستورالعمل های Rewriterule استفاده می کنید ، برای جلوگیری از حلقه های قوانین ، اقدامات صریح انجام می دهید و فقط بر روی پرچم [l] حساب نمی کنید تا اجرای یک سری از قوانین را خاتمه دهید ، همانطور که در زیر آمده است.
یک پرچم جایگزین ، [پایان] ، می تواند برای خاتمه نه تنها دور فعلی پردازش بازنویسی بلکه از جلوگیری از هرگونه پردازش بازنویسی بعدی در زمینه در هر مرحله (HTACCESS) جلوگیری شود. این در مورد درخواست های جدید ناشی از تغییر مسیر خارجی صدق نمی کند.
نمونه ای که در اینجا آورده شده است ، هر درخواست را به index. php بازنویسی می کند ، و درخواست اصلی را به عنوان یک آرگومان پرس و جو به index. php ارائه می دهد ، با این حال ، بازنویسی تضمین می کند که اگر درخواست از قبل برای index. php باشد ، بازنویسی رد می شود.
بازنویسی "/" بازنویسی "٪" "! =/index. php" Rewriterule "^(.*)" "/index. php؟req= $1" [l ، pt]
n | بعدی
پرچم [N] باعث می شود که قوانین با استفاده از نتیجه Ruleset تا آنجا که به عنوان یک نقطه شروع ، دوباره از بالا شروع می شود. با احتیاط شدید استفاده کنید ، زیرا ممکن است منجر به حلقه شود.
برای مثال ، اگر می خواهید یک رشته یا نامه خاص را به طور مکرر در یک درخواست جایگزین کنید ، می توان از پرچم [بعدی] استفاده کرد. مثال نشان داده شده در اینجا A را با B در همه جای درخواست جایگزین می کند و این کار را ادامه می دهد تا زمانی که دیگر تعویض نشود.
Rewriterule "(.*) A (.*)" "$ 1b 2 $" [n]
شما می توانید به عنوان یک حلقه مدتی فکر کنید: در حالی که این الگوی هنوز مطابقت دارد (یعنی ، در حالی که URI هنوز حاوی A است) ، این تعویض را انجام دهید (یعنی A را با A B جایگزین کنید).
در 2. 4. 8 و بعد از آن ، این ماژول پس از 32،000 تکرار خطایی را برای محافظت در برابر حلقه ناخواسته بازگرداند. با افزودن به پرچم N ، حداکثر تعداد جایگزین ها را می توان مشخص کرد.
# Be willing to replace 1 character in each pass of the loop RewriteRule "(.+)[>
NC | NOCASE
استفاده از پرچم [NC] باعث می شود که مجدداً نوشتن به صورت حساس به مورد همسان شود. یعنی اهمیتی نمی دهد که آیا حروف به عنوان مورد بالا یا مورد پایین در URI همسان ظاهر می شوند.
در مثال زیر ، هر درخواست برای یک فایل تصویری به سرور تصویر اختصاصی شما ارائه می شود. مسابقه حساس به مورد است ، به طوری که پرونده های . jpg و . jpg هر دو قابل قبول هستند ، به عنوان مثال.
Rewriterule "(.*. (jpg | gif | png)) $" "http: //images. example. com $1" [p ، nc]
ne | noescape
به طور پیش فرض ، شخصیت های خاص مانند و و؟به عنوان مثال ، برای قوانینی که منجر به تغییر مسیر خارجی می شوند ، به معادل hexcode آنها تبدیل می شود. استفاده از پرچم [NE] مانع از وقوع آن می شود.
دوباره نوشتن "^/anchor /(.+)" "/bigpage. html# $1" [ne ، r]
مثال بالا هدایت /لنگر /XYZ به /bigpage. html#xyz را هدایت می کند. حذف [NE] منجر به تبدیل # به معادل hexcode خود ، ٪ 23 خواهد شد ، که منجر به این خواهد شد که 404 وضعیت خطا پیدا نشود.
ns | nosubreq
استفاده از پرچم [NS] مانع از استفاده از قانون در زیر مجموعه ها می شود. به عنوان مثال ، صفحه ای که با استفاده از SSI (سمت سرور شامل) گنجانده شده است ، یک زیرمجموعه است و ممکن است بخواهید از بازنویسی در آن زیر مجموعه ها خودداری کنید. همچنین ، هنگامی که MOD_DIR سعی می کند اطلاعات مربوط به پرونده های پیش فرض دایرکتوری ممکن را پیدا کند (مانند پرونده های index. html) ، این یک زیرمجموعه داخلی است ، و شما اغلب می خواهید از بازنویسی در چنین زیر مجموعه ها خودداری کنید. در زیر مجموعه ها ، همیشه مفید نیست و در صورت اعمال مجموعه کامل قوانین ، حتی می تواند باعث ایجاد خطا شود. از این پرچم برای حذف قوانین مشکل ساز استفاده کنید.
برای تصمیم گیری در مورد استفاده یا عدم استفاده از این قانون: اگر URL ها را با اسکریپت های CGI پیشوند کنید ، آنها را وادار کنید که توسط CGI-Script پردازش شوند ، به احتمال زیاد شما در زیر و در زیر مشكلات مشكلات (یا سربار قابل توجهی) خواهید داشت. در این موارد از این پرچم استفاده کنید.
تصاویر ، پرونده های JavaScript یا پرونده های CSS ، که به عنوان بخشی از صفحه HTML بارگذاری شده اند ، زیر مجموعه نیستند - مرورگر آنها را به عنوان درخواست HTTP جداگانه درخواست می کند.
P | پروکسی
استفاده از پرچم [P] باعث می شود درخواست توسط MOD_PROXY انجام شود و از طریق درخواست پروکسی انجام شود. به عنوان مثال ، اگر می خواستید تمام درخواست های تصویر توسط یک سرور تصویر پشتی اداره شود ، ممکن است کاری مانند موارد زیر انجام دهید:
Rewriterule "/( .*) .(JPG|GIF|PNG) $" "http://images. example. com/ $1. $" [P]
استفاده از پرچم [P] دلالت بر [L] دارد - یعنی درخواست بلافاصله از طریق پروکسی تحت فشار قرار می گیرد و هرگونه قوانین زیر در نظر گرفته نمی شود.
شما باید اطمینان حاصل کنید که رشته جایگزینی یک URI معتبر است (به طور معمول با http: // نام میزبان) که می تواند توسط mod_proxy قابل استفاده باشد. اگر اینگونه نباشد ، از ماژول پروکسی خطایی دریافت خواهید کرد. از این پرچم برای دستیابی به اجرای قدرتمند تر دستورالعمل Proxypass استفاده کنید تا محتوای از راه دور را در فضای نام سرور محلی ترسیم کنید.
هشدار امنیتی
با توجه به تأثیر امنیتی از اجازه تأثیر مشتری بر مجموعه URL هایی که سرور شما به عنوان یک پروکسی عمل می کند ، در هنگام ساخت URL هدف این قانون مراقبت کنید. اطمینان حاصل کنید که این طرح و نام میزبان URL یا ثابت است ، یا به مشتری اجازه نمی دهد تا تأثیر ناعادلانه ای داشته باشد.
هشدار عملکرد
استفاده از این پرچم باعث استفاده از mod_proxy ، بدون دستیابی به اتصالات مداوم می شود. این بدان معنی است که اگر آن را با ProxyPass یا ProxyPassmatch تنظیم کنید ، عملکرد پروکسی شما بهتر خواهد بود
این امر به این دلیل است که این پرچم باعث استفاده از کارگر پیش فرض می شود ، که از طریق اتصال/استفاده مجدد از اتصال استفاده نمی کند.
از استفاده از این پرچم خودداری کنید و هر زمان که می توانید آن دستورالعمل ها را ترجیح دهید.
توجه: برای استفاده از این پرچم باید mod_proxy فعال شود.
PT | گذرگاه
هدف (یا رشته جایگزینی) در یک نوشته مجدد فرض می شود که به طور پیش فرض یک مسیر پرونده است. استفاده از پرچم [PT] باعث می شود که به جای آن به عنوان URI رفتار شود. یعنی استفاده از پرچم [PT] باعث می شود نتیجه نوشتن مجدد از طریق نقشه برداری URL منتقل شود ، به طوری که نقشه های مبتنی بر مکان مانند نام مستعار ، تغییر مسیر یا کتاب مقدس ، به عنوان مثال ، ممکن است فرصتی داشته باشندبرای تأثیرگذاری
به عنوان مثال ، اگر شما یک نام مستعار برای /نمادها دارید و یک نوشتن دوباره در آنجا دارید ، باید از پرچم [PT] استفاده کنید تا اطمینان حاصل شود که نام مستعار ارزیابی می شود.
alias "/icons" ""/usr/local/apache/icons "rewriterule" /pics/(.+) )
حذف پرچم [PT] در این مورد باعث می شود که نام مستعار نادیده گرفته شود و در نتیجه خطای "فایل پیدا نشده" بازگردانده شود.
پرچم PT به معنای پرچم L است: بازنویسی برای انتقال درخواست به مرحله بعدی پردازش متوقف می شود.
توجه داشته باشید که پرچم PT در زمینه های هر مرحله ای مانند بخش ها یا در پرونده های . htaccess دلالت دارد. تنها راه برای دور زدن که بازنویسی به آن است -.
qsa | qsappend
هنگامی که URI جایگزینی حاوی یک رشته پرس و جو است ، رفتار پیش فرض Rewriterule این است که رشته پرس و جو موجود را دور بیندازید و آن را با یک مورد تازه تولید شده جایگزین کنید. با استفاده از پرچم [QSA] باعث می شود رشته های پرس و جو ترکیب شوند.
قانون زیر را در نظر بگیرید:
Rewriterule "/pages/(.+)" "/page. php؟page= $1" [QSA]
با پرچم [QSA] ، درخواست /صفحات /123؟ یک = دو به /page. php؟page=123& one=two نقشه برداری می شود. بدون پرچم [QSA] ، همان درخواست به /page. php؟page=123 نقشه برداری می شود - یعنی رشته پرس و جو موجود دور ریخته می شود.
qsd | qsdiscard
هنگامی که URI درخواست شده حاوی یک رشته پرس و جو است ، و URI هدف این کار را نمی کند ، رفتار پیش فرض تکرار مجدد این است که آن رشته پرس و جو را در URI هدف کپی کنید. با استفاده از پرچم [QSD] باعث می شود رشته پرس و جو از بین برود.
این پرچم در نسخه 2. 4. 0 و بعد از آن موجود است.
با استفاده از [QSD] و [QSA] با هم منجر به تقدم [QSD] می شود.
اگر URI Target دارای یک رشته پرس و جو باشد ، رفتار پیش فرض مشاهده می شود - یعنی رشته پرس و جو اصلی دور ریخته می شود و با رشته پرس و جو در URI Target Rewriterule جایگزین می شود.
qsl | qslast
به طور پیش فرض ، اولین سؤال (سمت چپ) در تعویض مسیر را از رشته پرس و جو محدود می کند. با استفاده از پرچم [QSL] به نوشتن مجدد دستور می دهد تا در عوض دو مؤلفه را با استفاده از آخرین سؤال (سمت راست) تقسیم کنید.
این هنگام نقشه برداری به پرونده هایی که دارای علامت سؤال تحت اللفظی در نام پرونده خود هستند ، مفید است. اگر از رشته پرس و جو در تعویض استفاده نشده است ، می توان در ترکیب با این پرچم ، یک علامت سؤال به آن اضافه شد.
این پرچم در نسخه 2. 4. 19 و بعد در دسترس است.
R | تغییر مسیر
استفاده از پرچم [R] باعث می شود که تغییر مسیر HTTP به مرورگر صادر شود. اگر یک URL کاملاً واجد شرایط مشخص شود (یعنی از جمله http: // serveame/) ، یک تغییر مسیر به آن مکان صادر می شود. در غیر این صورت ، از پروتکل فعلی ، نام سرور و شماره پورت برای تولید URL ارسال شده با تغییر مسیر استفاده می شود.
هر کد وضعیت پاسخ HTTP معتبر ممکن است با استفاده از نحو [R = 305] مشخص شود ، در صورت عدم مشخص شدن ، کد وضعیت 302 به طور پیش فرض استفاده می شود. کد وضعیت مشخص شده لزوماً یک کد وضعیت تغییر مسیر (3xx) نیست. با این حال ، اگر یک کد وضعیت خارج از محدوده تغییر مسیر (300-399) باشد ، رشته جایگزینی به طور کامل کاهش می یابد و بازنویسی به گونه ای متوقف می شود که گویی از L استفاده می شود.
علاوه بر کدهای وضعیت پاسخ ، شما همچنین می توانید وضعیت تغییر مسیر را با استفاده از نامهای نمادین آنها مشخص کنید: TEMP (پیش فرض) ، دائمی یا بی نظیر.
تقریباً همیشه می خواهید در رابطه با [L] (یعنی استفاده از [r ، l]) از [r] استفاده کنید زیرا به تنهایی ، پرچم [r] http: // thishost [: thisport] را به URI آماده می کند، اما سپس این کار را به قانون بعدی در قوانین منتقل می کند ، که اغلب می تواند منجر به هشدارهای "URI نامعتبر در درخواست" شود.
S | پرش
از پرچم [S] برای پرش از قوانینی استفاده می شود که شما نمی خواهید اجرا کنید. نحو پرچم پرش [S = N] است ، جایی که n تعداد قوانین را برای پرش نشان می دهد (به شرط مسابقات دوباره نوشتن). این را می توان به عنوان بیانیه GOTO در قوانین بازنویسی خود تصور کرد. در مثال زیر ، اگر URI درخواست شده با یک پرونده واقعی مطابقت نداشته باشد ، ما فقط می خواهیم دوباره نوشتن را اجرا کنیم.
# آیا درخواست پرونده غیر موجود است؟بازنویسی "٪" "! -f" بازنویسی "٪" "! -d" # اگر چنین است ، از این دو بازنویسی بازنویسی بازنویسی کنید؟ ""-" [S = 2] Rewriterule "(.*. gif)" "تصاویر
این تکنیک مفید است زیرا یک بازنویسی فقط در مورد بازنویسی بلافاصله پس از آن اعمال می شود. بنابراین ، اگر می خواهید یک بازنویسی برای چندین بازنویسی استفاده کنید ، یکی از تکنیک های ممکن ، نفی آن شرایط و اضافه کردن یک بازنویسی با پرچم [پرش] است. شما می توانید از این استفاده کنید تا سازه های شبه If-then-then-Even را بسازید: آخرین قاعده بند آن زمان SKIP = N می شود ، جایی که N تعداد قوانین موجود در بند دیگر است:
# آیا پرونده وجود دارد؟بازنویسی "٪" "! -f" بازنویسی "٪" ""! -d " # اگر قصد داشتیم به استنزا" دیگری "برویم ، یک ساختار if-then-سپس ایجاد کنید. Rewriterule ".؟""-" [S = 3] # اگر پرونده وجود داشته باشد ، پس از آن: دوباره نوشتن "(.*. gif)" "تصاویر. php؟ 1 $" rewriterule "(.*. html)" "docs. php؟ 1 $"# از پیست "دیگری" پرش کنید. Rewriterule ".؟""-" [S = 1] # other. Rewriterule "(.*)" "404. php؟ پرونده = 1 $" # پایان
احتمالاً انجام این نوع پیکربندی با استفاده از و دستورالعمل ها ساده تر است.
T | نوع
نوع MIME را که پاسخ حاصل از آن ارسال می شود ، تنظیم می کند. این همان اثر دستورالعمل AddType را دارد.
به عنوان مثال ، در صورت درخواست به روشی خاص ، ممکن است از تکنیک زیر برای خدمت کد منبع Perl به عنوان متن ساده استفاده کنید:
# serve . pl به عنوان متن ساده متن " . pl $" "-" [t = متن/ساده]
یا شاید ، اگر دوربینی دارید که تصاویر JPEG را بدون پسوند فایل تولید می کند ، می توانید آن تصاویر را مجبور کنید با توجه به نام پرونده های آنها با نوع صحیح MIME سرو شوند:
# پرونده هایی با "IMG" در نام تصاویر JPG هستند. دوباره نوشتن "img" "-" [t = تصویر/jpg]
اگر در متن هر مستقیم استفاده می شود ، فقط از (dash) به عنوان جایگزینی برای کل دور پردازش mod_rewrite استفاده کنید ، در غیر این صورت مجموعه نوع میم). پرچم L در این زمینه می تواند برای پایان دادن به دور فعلی پردازش Mod_Rewrite مفید باشد.
نظرات
توجه: این یک بخش پرسش و پاسخ نیست. نظرات قرار داده شده در اینجا باید به پیشنهادات مربوط به بهبود اسناد یا سرور اشاره شود و در صورت اجرای یا نامعتبر/غیرقانونی توسط مجریان ما حذف می شوند. سؤالاتی در مورد نحوه مدیریت سرور HTTP Apache باید در کانال IRC ما ، #httpd ، در Libera. chat هدایت شود یا به لیست های پستی ما ارسال شود.
کپی رایت 2023 بنیاد نرم افزار Apache. مجوز تحت مجوز Apache ، نسخه 2. 0.
استراتژی برای تجارت گزینه های...
ما را در سایت استراتژی برای تجارت گزینه های دنبال می کنید
برچسب :
نویسنده : فریبا کامران
بازدید : 29
تاريخ : پنجشنبه
26 مرداد
1402 ساعت: 13:28