الترتيب الصحيح لإعادة كتابة القواعد في ملف HTACCESS

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

سؤال

أحتاج إلى:

http://www.example.com/v1/my-project/ إعادة توجيه إلى http://example.com/my-project/

وبالتالي :

(1) إزالة شبكة الاتصالات العالمية من http_host

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

(2) إزالة الجزء "V1 /" من طلب الطلب

RewriteCond %{REQUEST_URI} ^/v1/(.*)$ [NC]
RewriteRule . %1 [R=301,L]

(3) أريد أيضا إعادة توجيه 404 إلى الصفحة الرئيسية.

ErrorDocument 404 /

(4) أخيرا، تعمل جميع المستندات الخاصة بي بالفعل في مجلد "V2 /" الذي يستضيف موقع الويب النشط الحالي، لكنني لا أريد "V2" في عنوان URL، فقط "/"

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule ^(.*)$ /v2/$1 [NC,L]

لذلك، وهنا القواعد الخاصة بي. سؤالي هو: أنا لا أدار (2): يتم إعادة توجيهها إلى / (بسبب القاعدة (3) أعتقد. أعتقد أن ترتيب قواعد يجب أن تكون معيبة ولكن لا يبدو لي أن أحصل عليه بشكل صحيح. يمكن أنت تساعد ؟

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

المحلول

"القاعدة 3" ليست قاعدة على الإطلاق، ونظامه بالنسبة لإعدادك لا يهم. القاعدة 2 فشل في بعض السبب الآخر. لست متأكدا مما إذا كان سيعالج مشكلتك، لكنني سأبسط القواعد الخاصة بك إلى حد ما عن طريق كتابةها مثل هذا:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) http://example.com/$1 [R=301,L]

RewriteRule ^v1/(.*) /$1 [R=301,L,NC]

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule (.*) /v2/$1 [NC,L]

نصائح أخرى

يجب عليك أولا كتابة أي قاعدة تسبب إعادة توجيه خارجي (R العلم) ثم القواعد الأخرى. وإلا يمكن استخدام عنوان URL إعادة كتابة بالفعل لإعادة توجيه خارجي على الرغم من أنه كان مخصصا للتو إعادة التوجيه الداخلي.

لذلك لن أغير الطلب لديك الآن.

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