سلام. من می خواهم در فایل htaccess این تغییر را به وجود بیاورم که هر درخواستی به ?نت سازان: هاست نامحدود برای سایت شما
و هر چیزی بعد از علامت سوال شد، سایت به یک صفحه ی دیگر redirect شود و یا یک ارور forbidden نشان دهد. باید چه دستوری بنویسم؟
نمایش نسخه قابل چاپ
سلام. من می خواهم در فایل htaccess این تغییر را به وجود بیاورم که هر درخواستی به ?نت سازان: هاست نامحدود برای سایت شما
و هر چیزی بعد از علامت سوال شد، سایت به یک صفحه ی دیگر redirect شود و یا یک ارور forbidden نشان دهد. باید چه دستوری بنویسم؟
متوجه منظورت نشدم
يعني هر درخواستي به شكل
index.php?sth
بود forbidden بشه؟
بله دقیقاً. یا این که ریدایرکت بشه به index.php
اينو نوشتم :
با عث ميشه هر درخواستي جز index.php و index.php? كه به صورت زير باشهکد:RewriteCond %{QUERY_STRING} .
RewriteRule ^index.php?(.*)$ index.php [R=301
index.php?sth
به index.php بره
چك نكردم! يك چك بكنيد درست باشه
این کد ظاهراً یه اشکالی داره. صفحات سایت مشکلی نداره ولی اگه URL مانند index.php?sdjg تایپ بشه این ارور رو می ده:
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.
اون نقطه ی تنها توی کد چیه؟
تست كردم روي لوكال جواب داد :-?
اونجوري نوشتم كه اگه query خالي بود شرط اجرا نشه و دقيقا همين خطايي كه الان ميده تكرار نشه!
رو local شرطم دست عمل مي كنه ولي ظاهرا اينجا نه !
برم يكم دست كاريش كنم ببينم چي ميشه!
لزوما بايد تو htaccess باشه؟
تو php اول index.php
اينو بزنيد درست ميشه با htaccess هم اگر لزوما ميخوايد بايد رو كد كار كنمکد:if(count($_GET)>0){
HEADER("LOCATION: index.php");
die();
}
ممنون. ببینید من برای گوگل می خوام اینو چون کلی محتوای duplicate روی سایتم دارم که باید از این طریق حذف بشه. طبق دستور گوگل، این محتوا یا باید ارور 404 یا 410 بده یا از طریق htaccess، ریدایرکت بشه به یک صفحه ی دیگه.
---------- Post added at 11:17 AM ---------- Previous post was at 11:16 AM ----------
بنابراین فکر کنم توی index.php تغییر دادن کار خاصی برام انجام نمی ده. چون بر اساس گوگل، حتی اگه صفحات رو از طریق robots.txt برای موتورهای جستجو ببندیم، باز هم چون محتوای اضافی واقعاً وجود داره، گوگل اونا رو حذف نمی کنه.
مجددا روي لوكال جواب داد!اميدوارم جواب بدهکد:RewriteCond %{QUERY_STRING} (.+)
RewriteRule ^index.php?(.*)$ index.php [R=301]
---------- Post added at 11:50 AM ---------- Previous post was at 11:48 AM ----------
ولي وقتي با خود php هم شما محتواي اضافي رو پاك كني،گوگل در دفعات بعدي ديگه ايندكس نميتونه بكنه و حل ميشه ، ضمن اينكه تو همين كد ميشه به يك صفحه استاندارد not found ارجاعش داد:
مثلا
if(count($_GET)>0){
HEADER("LOCATION: notfound.php");
die();
}