إعادة التوجيه إلى دليل فرعي وخارجه
-
23-09-2019 - |
سؤال
لدي مشكلة إعادة توجيه mod_rewrite لا يمكنني اكتشافها.
يتم إعادة كتابة جميع الطلبات من مجال معين "بصمت" إلى دليل فرعي محدد. على سبيل المثال www.mydomain.net/hello.html
يسترجع الملف في /net/hello.html
. ما يلي. htaccess (وضعت في جذر الاستضافة) يحقق هذا بشكل مثالي:
RewriteEngine on
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200 # <-- i will need this later. read to the end of the post.
RewriteRule .* - [L]
rewriteCond %{HTTP_HOST} ^www.mydomain.net$
rewriteCond %{REQUEST_URI} !^/net.*$
rewriteRule (.*) /net/$1 [L]
ومع ذلك ، فإن عناوين URL المباشرة في هذا الدليل يجب أن تعيد توجيهها بشكل واضح مع 301 إلى عنوان URL بدون هذا الدليل الفرعي. على سبيل المثال www.mydomain.net/net/hello.html
يجب إعادة توجيه إلى www.mydomain.net/hello.html
(الذي لا يزال يسترجع الملف فيه /net/hello.html
). ملف .htacces الخاص بي لهذا (وضعت في /net
) للأسف لا يعمل:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule ^(.*) /$1 [R=301,L]
أحصل على حلقة إعادة توجيه غير محدودة على الرغم من RewriteCond %{ENV:REDIRECT_STATUS} 200
حظر في ملف .htaccess الجذر ... فما الخطأ؟
راجع للشغل ، لا بد لي من استخدام mod_rewrite ، لأن الموقع مستضاف خارجي وليس لدي أي إمكانية الوصول إلى تكوينات Apache.
شكرا جزيلا على أي مؤشرات.
المحلول
فحص خط طلب HTTP في الطلب في حين أن:
RewriteCond %{THE_REQUEST} ^GET\ /net[/? ]
RewriteRule ^net($|/(.*)) /$2 [L,R=301]