# زبان های اسکریپتی > PHP > سوال: مشکل htaccess

## matrixhassan

با سلام شاید سوالم تکراریه  چه کنم که درست نشد :

قضیه همون عوض کردن آدرس  سایته .
من تعدادی آدرس دارم که هر کدم به بخشی اشاره داره مثلا :

http://www.domain.com/index.php?page=register
http://www.domain.com/index.php?page=login
http://www.domain.com/index.php?page=exit

میخواستم تبدیل بشن به :



http://www.domain.com/register
http://www.domain.com/login
http://www.domain.com/exit



و توی htaccess توی فولدر public این کدهارو نوشتم :




RewriteEngine on
RewriteRule ^(.*).htm$ $1.php [nc] 
و

RewriteRule ^([^/]*)/([^/]*)/?$ index.php?page=$1 [QSA,NC,L]

و تقریبا تمام گزینه های که تونستم تو این سایت پیدا کنم نوشتم و هیچ اتفاقی نیافتاد.

اینو هم بگم که از طرف هاست مشکلی نیست چون دستورات دیگه مودریرایت مثلا محدود کردن فایلها کار میکنه.

-میخواستم بدون آیا کدها اشتباهه که اگه هست لطفا راهنمایی کنید .
-یا اینکه بعد از نوشتن این دستورات باید لینک رو تو تمام صفحات php تبدیل کنم به کد بهینه شده یعنی خودش عوض نمیکنه ؟
یا موارد دیگه هست که باید انجام بدیم.
ممنون میشم کمک کنید

----------


## thacker

فکر کنم این میشه :


RewriteRule ^([^/]*)$  index.php?page=$1 [L]

----------


## mamali-mohammad

RewriteRule ^([^/]+)/$ page.php?page=$1

----------


## matrixhassan

این کدی که شما گفته بودین رو نوشتم اولا اون قسمت تغییر نکرد دوما نمایش اطلاعاته پایگاه دادم نیومد
کمک فقط این قسمت سایتم مونده ها دوستان

----------


## mamali-mohammad

مطئمن باش apache تنظیم خاص خودشو داره
روی یه هاست دیگه تست کن

----------


## matrixhassan

نمیشه عزیز من دیگه همه چیزو تو این هاست انجام دادم فقط این قسمتش مونده  یا باید درست کنم یا دیگه این کارو نکنم اگه روش دیگه ای هست کمک کنید  خواهشا
من میخواستم بدونم اگه تو فایل htaccess این کدو بنویسم کافیه یا باید تو فایلهای php به جای

http://www.domain.com/index.php?page=register

اینو بنویسم


http://www.domain.com/register

----------


## thacker

توی خط دوم نوشتی که فایل های php رو به عنوان htm بشناسه ... 
شاید دلیلش این باشه ... یه بارم همون کد رو index.htm بزن توی htaccess ...

----------


## matrixhassan

من اونم امتحان کردم وقتی کدی که شما دادین رو میزنم کلا فایلهای css ام کار نمیکنند انگار نمی خواد درست بشه شایدم من بلد نیستم

یه سوال دیگه من تو فایل index ام تقریبا چیزهای زیادی فراخوانی می کنم یعنی هر چی که مربوط به نمایش تو فایل index ام نمایش داده میشه به وسیله تابع مثل صفحه ثبت نام ، ورود، نمایش و محتویات ولی پردازششون تو صفحه های جداگانه ست می خواستم بدون این مشکلی نداره از قبیل بهینه بودن یا اینکه بعدا که سایت بازدیدش رفت بالا به مشکل برنخوره ؟

----------


## thacker

Css کار نمیکنه چون باید آدرسش رو بصورت کامل بدید : http://Yoursite.com/Css/Style.css

----------


## رضا قربانی

> من اونم امتحان کردم وقتی کدی که شما دادین رو میزنم کلا فایلهای css ام کار نمیکنند انگار نمی خواد درست بشه شایدم من بلد نیستم


وقتی از توابع htaccess استفاده می کنی باید *تمامی آدرس دهی ها* رو به *صورت کامل* آدرس دهی کنید  

اینجا هم بهتون خیلی کمک می کنه :https://barnamenevis.org/showthread.p...21#post1220621

موفق باشید

----------


## matrixhassan

با سلام خدمت دوستان و آقای رضا قربانی 

من فایلهای اصلی رو گذاشتم ولی دیگه مجبور شدم خیلی خلاصه و با تغییر بزارم اگه کدهاشو ببینین متوجه اوضا میشین 
3 تا فایل یکی اصلی دومی فایلی که فراخوانی توش صورت میگیره و سومی فایل htaccess

حالا نگاه کنید ببینید درست شدنیه نشدنیه و هم از نظر بهینه بودم مشکلی داره نداره اگه تونستین که درستش کنید خیلی ممنون میشم

با تشکر

----------


## Unique

از اونجایی که میگین با دستورات بالا مشکل پیدا کردین پس میتونیم مطمئن باشیم ماژول mod_rewrites حتما نصبه !
این دو خط را هم امتحان کنید ! من الان چندین سایت دارم که با این داره کار میکنه :

RewriteEngine On
RewriteRule ^([a-zA-Z0-9]+)$ index.php?page=$1

این اصلا نباید css ها یا عکس های شما را دچار مشکل کنه.

----------


## matrixhassan

جلل خالق

بازم نشد تو لوکالم امتحان کردم تو هاستم

----------


## thacker

خط آخر htaccess رو به صورت زیر تغییر بدید : 


RewriteRule ^([a-zA-Z0-9]+)$ home.php?page=$1

----------


## matrixhassan

دوست گلم تو برنامه من همون index و فرضا home گذاشتم ممنون از جوابتون.
 مگه تو فایلی که من گذاشتم شما امتحان میکنید جواب میده ؟ یا تو اون حالت ؟

----------


## Unique

منظورتون چیه که نشد ؟
خطای 404 میده ؟

----------


## matrixhassan

نه آدرس لینک عوض نمیشه

یعنی مثلا بشه 

http://www.domain.com/register

----------


## thacker

من روی فایلی که گذاشتی امتحان کردم و خط آخر رو همونطوری که گفتم تغییر دادم و برنامه جواب داد ...!

----------


## Tarragon

داداش نمی شه یعنی الان ادرس http://www.domain.com/register رو می زنی http://www.domain.com/index.php?page=register رو نمی یاره؟

----------


## matrixhassan

منم تو لوکال امتحان کردم نشد 
دوست عزیز thacker میشه شما فایلهای با اونا امتحان کردینو بزارین ما هم امتحان کنیم شاید اونا جواب بده

----------


## thacker

همون فایلی که خودتون ضمیمه کردید رو اجرا کنید ...
من فقط خط آخر htaccess رو به این صورت تغییر دادم : 
RewriteRule ^([a-zA-Z0-9]+)$ home.php?page=$1

----------


## Unique

دوست عزیز به نظر من شما یک اشتباه لپی کوچیک دارین میکنین :

این باید حتما جواب بده :

RewriteRule ^([a-zA-Z0-9]+)$ index.php?page=$1

حالا اگه جواب نمیده

1 - شما نمیدونم چرا میگین آدرس باید عوض بشه ! فکر کنم شما یه موضوعی توی ذهنتون اشتباه شکل گرفته ، شما باید بزنین http://www.domain.com/register  و انتظار داشته باشین که محتوای http://www.domain.com/index.php?page=register را ببینین ، آدرس مرورگر هیچ تغییر نمیکنه و تغییر در سمت سرور اتفاق میفته ! من احساس کردم شما میزنین http://www.domain.com/index.php?page=register و انتظار دارین آدرس به http://www.domain.com/register تغییر پیدا کنه که اشتباه هست.

2 - اگه با زدن http://www.domain.com/register شما به خطای 404 میخورین باید مطمئن بشین که mod_rewrite نصبه ، برای این کار باید توی خروجی phpinfo در قسمت apache2handler مقادیر Loaded Modules را بررسی کنید.

3 - دوستمون میگن اسم فایل شما Home.php هست و نه Index.php یکبار از اسامی فایل ها مطمئن بشین.

امیدوارم مشکلتون حل بشه.

----------


## matrixhassan

شما یعنی هیچ تغییری تو فایلها ندادین اگه ندادین که اصلا کار نمیکنه چون من یادم رفت ادرسهارو تو اون فایلی که ارسال کردم ویرایش کنم چون اسم فایل home ولی آدرس
http://localhost/advertise/index.php?page=register
به این صورت که وقتی میزنی اصلا کار نمیکنه پی تغییر دادین ؟

من میخوام همون آدرس  http://www.domain.com/register نمایش داده بشه و اگه آدرس http://www.domain.com/index.php?page=register زده شد هیچی نیاره همین .

----------


## thacker

دوست عزیز درسته شما آدرس ها رو ویرایش نکردید ...
اما دفعه اولی که آدرس http://127.0.0.1/register رو زدم خطای 404 داد ... بعد که خط آخر رو تغییر دادم دیگه خطا نداد و صفحه باز شد ...
در ضمن از همین کد ، من برای 2-3 تا سایت استفاده کردم و جواب داده.

----------


## matrixhassan

نمیدونم بلاخره کار نکرد با این شرایط من دیگه نمیدونم مشکل کجاست .

----------


## thacker

به نظرم کدهاتون رو آپلود کنید ، بعد اطلاعات هاست رو بدید یکی براتون درستش کنه ...
موفق باشید

----------


## matrixhassan

راه دیگه نداره من کلی اطلاعات دارم تو اون سایت اگه فایلهارم ناقص بزارم هم که نمیشه ؟

----------


## thacker

راه دیگش اینه که اول از همه از هاستتون مطمئن بشید و اگه مشکلی نداشت ، شروع کنید به چک کردن اسکریپتتون ...

----------


## matrixhassan

من تو هاست امتحان کردم دستورات دیگه کار میی کنند مثلا نشان ندادن عکسها در مرورگر کاربر این ج.اب میده  هم ازشون پرسیدم گفتن مشکلی ندارن.

----------


## رضا قربانی

> با سلام خدمت دوستان و آقای رضا قربانی 
> 
> من فایلهای اصلی رو گذاشتم ولی دیگه مجبور شدم خیلی خلاصه و با تغییر بزارم اگه کدهاشو ببینین متوجه اوضا میشین 
> 3 تا فایل یکی اصلی دومی فایلی که فراخوانی توش صورت میگیره و سومی فایل htaccess
> 
> حالا نگاه کنید ببینید درست شدنیه نشدنیه و هم از نظر بهینه بودم مشکلی داره نداره اگه تونستین که درستش کنید خیلی ممنون میشم
> 
> با تشکر


خسته نباشید دوست عزیز
شما باید بیشتر در مورد این فایل تمرین کنید که من لینکش آموزش که توی همین سایت هست رو بهتون دادم اما فکر نکنم زمانی برای یادگیریش گذاشته باشید . شما باید عمیق یاد بگیرید نه اینکه هر تیکه کد رو از جایی جایگزین کنید . 
htaccess   :  برای خودش یه زبان برنامه نویسیه. 
این نوع لینک دادن بهینه هست ولی بهینه تر اینه که در آخرش .html بذارید (http://www.domain.com/register.html) که اونم باز برای خودش یه سری دستور داره که توی آموزشی که گفتم هست.

شما وقتی میگید صفحه home.php  پیشفرضه پس چرا توی آدرس دهی ها از index.php  استفاده می کنید.

بفرمایید آماده و منظم در اختیارتون . عملیات بر روی لینک ثبت نام شما اعمال شده . نگاه کنید و لینک های دیگه رو خودتون بسازید.

موفق و پیروز باشید

----------


## matrixhassan

با سلام مجدد 

این فایلی که گذاشتینو من ورداشتم و تست کردم ولی اینم که جواب نمیده شما اومدین و اسن دستور گذاشتین

RewriteEngine On

DirectoryIndex home.php


RewriteRule ^([a-zA-Z0-9]+)$ home.php?page=$1





تا اینجا درست و امدین تو صفحه اول نوشتین 



if($_GET["page"]=="register")
{
echo'<h1 style=" color:red;text-decoration:blink">مشکل شما برطرف شده است</h1>';
}






و آدرس لینکه ثبت نام رو هم کردین 

http://localhost/Test5809/register
یعنی اگه روی ثبت نام کلیک بشه یعنی آدرس  http://localhost/Test5809/index.php?page=register که تبدیل شده به آدرس بالا باید اون echo مربوطه پیغام بده که نمیده ؟

شایدم سیستم من خرابه دوستان اگه لطف کنند امتحان کنن ممنون میشم.

با تشکر

----------


## thacker

مشکل از سیستم شماست ...
کدهایی که دوستمون گذاشت جواب میده ...
لطفا چک کنید سیستمتون رو...

----------


## matrixhassan

با سلام 

با تشکر از همه دوستان مشکل از طرف من بود انگار ایندفعه حل شد 
ممنونم از همه دوستان

----------


## matrixhassan

با سلام مجدد

حالا یه مشکل دیگه پیش اومد که جوابشو نتونستم پیدا کنم.

من آدرس :

http://localhost/adv/index.php?p=per&id=g&code=5
رو میخوام به این تبدیل کنم :
http://localhost/adv/per/g/5
با دستور :

RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1&id=$2&code=$3 [QSA,NC,L]




تو اینا مشکلی نیست مشکل اینه که تمام عکسهای که درست توی فولدور images هستو میاره و عکسهای رو که در فولدور های داخل images هستو نمیاره مثلا  images/banner/ عکسهای توی بنر و نمیاره ؟

طبق آموزشم بند 77 هم عمل کردم آدرسها همه مطلقه و نمیدونم مشکل کجاست ؟

با تشکر

----------


## matrixhassan

با سلام مجدد 

من بازم به مشکل برخوردم 

مشکل در ریدایرکت کردن هست چهار تا آدرس به سایتم مراجعه میکنند :

www.domain.com
domain.com
domain.ir
www.domain.ir

خوب وقتی یه دستور برای یکی از اینا می نویسم عمل ریدایرکت انجام میشه :



RewriteCond %{http_host} ^domain\.ir [NC]

RewriteRule ^(.*)$ http://www.domain.com/ [R=301,NC,L]



ولی وقتی برای همه می نویسم کار نمیکنه :



RewriteCond %{http_host} ^domain\.ir [NC]
RewriteCond %{http_host} ^domain\.com [NC]
RewriteCond %{http_host} !^www\.domain\.ir [NC]
RewriteRule ^(.*)$ http://www.domain.com/ [R=301,NC,L]




و وقتی برای هر کدوم به طور جداگانه می نویسم اصلا کار نمی کنه .

ممنون میشم راهنمایی کنید .

----------

