PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : کمک در rewrite rule



bijans
August 17th, 2010, 15:46
سلام. من می خواهم در فایل htaccess این تغییر را به وجود بیاورم که هر درخواستی به ?نت سازان: هاست نامحدود برای سایت شما (http://www.netsazan.com/index.php)
و هر چیزی بعد از علامت سوال شد، سایت به یک صفحه ی دیگر redirect شود و یا یک ارور forbidden نشان دهد. باید چه دستوری بنویسم؟

Rezash
August 17th, 2010, 15:51
متوجه منظورت نشدم
يعني هر درخواستي به شكل
index.php?sth
بود forbidden بشه؟

bijans
August 17th, 2010, 16:02
بله دقیقاً. یا این که ریدایرکت بشه به index.php

Rezash
August 17th, 2010, 17:21
اينو نوشتم :


RewriteCond %{QUERY_STRING} .
RewriteRule ^index.php?(.*)$ index.php [R=301

با عث ميشه هر درخواستي جز index.php و index.php? كه به صورت زير باشه
index.php?sth
به index.php بره
چك نكردم! يك چك بكنيد درست باشه

bijans
August 17th, 2010, 23:00
این کد ظاهراً یه اشکالی داره. صفحات سایت مشکلی نداره ولی اگه URL مانند index.php?sdjg تایپ بشه این ارور رو می ده:

Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

اون نقطه ی تنها توی کد چیه؟

Rezash
August 18th, 2010, 10:23
تست كردم روي لوكال جواب داد :-?
اونجوري نوشتم كه اگه query خالي بود شرط اجرا نشه و دقيقا همين خطايي كه الان ميده تكرار نشه!
رو local شرطم دست عمل مي كنه ولي ظاهرا اينجا نه !
برم يكم دست كاريش كنم ببينم چي ميشه!

bijans
August 18th, 2010, 10:49
تست كردم روي لوكال جواب داد :-?
اونجوري نوشتم كه اگه query خالي بود شرط اجرا نشه و دقيقا همين خطايي كه الان ميده تكرار نشه!
رو local شرطم دست عمل مي كنه ولي ظاهرا اينجا نه !
برم يكم دست كاريش كنم ببينم چي ميشه!

ممنون می شم. چون کارم خیلی واجبه و هیچ جا روی اینترنت یه دستورالعمل درست حسابی برای این کار پیدا نکردم. الآن بیشتر از یک هفته است که دارم جستجو می کنم!

Rezash
August 18th, 2010, 11:06
لزوما بايد تو htaccess باشه؟
تو php اول index.php


if(count($_GET)>0){
HEADER("LOCATION: index.php");
die();
}

اينو بزنيد درست ميشه با htaccess هم اگر لزوما ميخوايد بايد رو كد كار كنم

bijans
August 18th, 2010, 11:17
ممنون. ببینید من برای گوگل می خوام اینو چون کلی محتوای duplicate روی سایتم دارم که باید از این طریق حذف بشه. طبق دستور گوگل، این محتوا یا باید ارور 404 یا 410 بده یا از طریق htaccess، ریدایرکت بشه به یک صفحه ی دیگه.

---------- Post added at 11:17 AM ---------- Previous post was at 11:16 AM ----------

بنابراین فکر کنم توی index.php تغییر دادن کار خاصی برام انجام نمی ده. چون بر اساس گوگل، حتی اگه صفحات رو از طریق robots.txt برای موتورهای جستجو ببندیم، باز هم چون محتوای اضافی واقعاً وجود داره، گوگل اونا رو حذف نمی کنه.

Rezash
August 18th, 2010, 11:50
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();
}

bijans
August 18th, 2010, 11:59
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

Rezash
August 18th, 2010, 12:01
اون [r=301] رو از تهش برداريد ببينيم چي ميشه!آخه رو لوكال به درستي كار مي كنه :-?
اگه اينم نشه فكر نكنم بتونم بنويسمش!

bijans
August 18th, 2010, 12:05
اون دستور رو هم توی index.php استفاده کردم ولی کار نکرد.

---------- Post added at 12:05 PM ---------- Previous post was at 12:03 PM ----------

باشه به هر حال ممنون.

Rezash
August 18th, 2010, 12:11
خواهش
دستور توي php صد در صد بايد كار كنه!
اگه ريداركت نميشه بايد خطا بده مگر اينكه نمايش خطا ها بسته باشه كه در اين صورت تو فايل log ميره
ولي دليل اينكه بخواد خطا بده هم اينه كه قبل دستور Header كه استفاده كردم خروجي داشته باشيد.
كد php رو در بالاترين مكان بعد از <?php به كار ببيريد و حتما از يك اديتور استاندارد php با ساپورت UTF استفاده كنيد.