PDA

View Full Version : فرق کد نویسی htaccess در localhost با سرور واقعی



14morteza14
شنبه 09 آذر 1392, 23:07 عصر
دوستان لطفا کمک کنید. می خوام آدس زیر رو :


http://localhost/site/category.php?cat1=realstateتوسط کد htaccess به :

http://localhost/site/realstateتبدیل کنم!

حالا تو سرور واقعی چه طور؟

http://site.com/category.php?cat1=realstateبه :

http://site.com/realstate

nsco_nsco
شنبه 09 آذر 1392, 23:24 عصر
سلام لوکال با سرور تفاوتی نمیکنه با این دستور خودت فقط جایگزین کن موفق باشی:



RewriteRule ^admin/(.+)/1010(.+)5214/id=92041010(.+)5214.aspx index.aspx?page01=$1&id=$3&id=$2 [L,NC,QSA]

14morteza14
شنبه 09 آذر 1392, 23:27 عصر
دوستان من خیلی تو بحث htaccess سعی کردم و تقریبا تمامی مطالبی که در این مورد بود رو امتحان کردم اما نتونستم کد htaccess مثال های بالا رو به درستی بنویسم. ممنون می شم یکی از اساتید زحمتش رو بکشه !

nsco_nsco
شنبه 09 آذر 1392, 23:32 عصر
این طوری می شه بازم تست کنید :


RewriteRule ^site.com/(.+) site.com/category.php?cat1=$1[L,NC,QSA]

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

مهرداد سیف زاده
یک شنبه 10 آذر 1392, 07:41 صبح
در مورد htaccess رفتاری متفاوت در هاست و localhost داره
در localhost باید RewriteBase رو براش مشخص کنید ولی در هاست پوشه جاری خود به خود به عنوان RewriteBase در نظر گرفته میشه
برای تغییر فایل و اجرای اون بر روی localhist کد زیر رو بعد از RewriteEngine On قرار بدید


RewriteBase /myWebFoldeSite/

بجای myWebFoldeSite باید مسیر پوشه رو در www بنویسید. مثلا پوشه سایت شما در مسیر c:/wamp/www/myWebFolderSite هست
حالا اگر در مسیر c:/wamp/www/website/myWebFolderSite هست باید مسیر رو بصورت زیر براش تعیین کنید


RewriteBase /website/myWebFoldeSite/

در کل شروع یادگیری کار با htaccess و بکارگیری فیچرهای اون کمی دردسر و سختی داره ولی خوب یاد بگیرید چون دنیایی خوش!!!!!!!!!!!!!!!!!!

MMSHFE
یک شنبه 10 آذر 1392, 08:06 صبح
دوستان لطفا کمک کنید. می خوام آدس زیر رو :

http://localhost/site/category.php?cat1=realstateتوسط کد htaccess به :

http://localhost/site/realstateتبدیل کنم!
حالا تو سرور واقعی چه طور؟

http://site.com/category.php?cat1=realstateبه :

http://site.com/realstate
توی لوکال هاست:


RewriteEngine On
RewriteBase /site
RewriteRule ^(.+)$ category.php?cat1=$1 [L,NC,QSA]

توی سرور واقعی:


RewriteEngine On
RewriteRule ^(.+)$ category.php?cat1=$1 [L,NC,QSA]

در اصل کاربرد htaccess. توی لوکال هاست و سرور واقعی فرقی نداره ولی خوب به ساختار کدها و تفاوتی که فایلهاتون توی لوکال هاست و سرور واقعی دارن، دقت کنید. توی لوکال هاست، فایلهای شما توی یک پوشه قرار دارن به اسم site و مستقیماً توی root وب سرور نیستن. پس باید با RewriteBase مسیر ریشه سایتتون رو مشخص کنید تا وقتی میگین category.php بدونه تو کدوم پوشه باید دنبالش بگرده. اما توی هاست چون در اکثر مواقع فایلها مستقیماً توی root هستن (public_html) بنابراین RewriteBase دیگه لازم نیست. توی همون سرور واقعی هم اگه فایلهاتون توی پوشه خاصی باشن (مثل فایلهای SubDomainها) باید RewriteBase رو بنویسید وگرنه مجبورین همه جا قبل از اسم فایلها، مسیر رو هم مشخص کنید.

14morteza14
یک شنبه 10 آذر 1392, 09:29 صبح
می دونم برای تشکر باید از دکمه تشکر استفاده کنم اما دوست داشتم این رو به اساتید محترم بگم که هم این سایت عالیه و هم خود شما. خیلی خیلی ممنون
فقط یه مشکل پیش میاد. وقتی این کد رو دادم صفحه اصلی سایتم به هم ریختش !!!


RewriteEngine On
RewriteBase /site/
RewriteRule ^(.+)$ category.php?cat1=$1 [L,NC,QSA]

کدی هم که به لینک دادم اینه:

<a href="/realstate">تست</a>

14morteza14
یک شنبه 10 آذر 1392, 09:54 صبح
:متفکر: نه خیر هر کاری کردم درست نشد .............

MMSHFE
یک شنبه 10 آذر 1392, 10:03 صبح
ببینید، معمولاً آدرسها رو به index.php میفرستن و اونجا برحسب نوع درخواست، فایل موردنظر رو ضمیمه میکنن ولی در کل این رو تست کنید:


RewriteEngine On
RewriteBase /site
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ category.php?cat1=$1 [L,NC,QSA]

این کد داره میگه اگه درخواست مستقیم به فایل یا پوشه ای نبود، اونوقت به category.php ارجاع بده. ضمناً آخر RewriteBase هم / اضافه نگذارین.

14morteza14
یک شنبه 10 آذر 1392, 10:09 صبح
ممنون الان لینک زیر کار می کنه:

http://localhost/site/realstate
اما لینک زیر رو که تعریف می کنم:

<a href="/realstate">تست</a>

وقتی روش کلیک می کنم به صورت زیر تو مرورگر باز می شه و پیغام not found رو مرورگر نمایش می ده !

http://localhost/realstate
اگه هم به صورت زیر تعریف کنم:


<a href="site/realstate">تست</a>
بعد کلیلک تو مرورگر به صورت:

http://localhost/site/site/realstate
میاد که باز not found میده!

14morteza14
یک شنبه 10 آذر 1392, 10:30 صبح
اساتید لطفا کمک کنند !

مهرداد سیف زاده
یک شنبه 10 آذر 1392, 10:50 صبح
بحث آدرس کامل هست. در کار با htaccess باید آدرسها رو کامل وارد کنید. این کار براحتی صورت میگیره با دردسر کمتر. مثلا برای همین آدرس دهی ابتدا در بالا کدتون یا در جایی که تمام سایت بهش دسترسی داشته باشن یک مقدار ثابت برابر با آدرس سایتتون تعریف کنید بصورت زیر:


define('URL','http://localhost/site/');

حالا در این آدرس دهی بصورت زیر این کار رو انجام بدید:

<a href="<?php echo URL; ?>realstate">تست</a>

البته ناگفته نماند برای کم کردن کد نوشته شده(منظور صرفا کاراکترها هستن) فرمت کوتاه هم شاید بکار بیاد

<a href="<?=URL; ?>realstate">تست</a>

14morteza14
یک شنبه 10 آذر 1392, 15:30 عصر
ممنون از دوستان. کل سایت رو گشتم اما نتونستم وقتی که پارامترهای ارسالی دو تا می شه، براش کد htaccess رو بنویسم. لطفا کمک کنید.

http://localhost/site/category.php?cat1=realstate&cat2=1

کد قبلی برای ارسال یک پارامتر جوابگو بود. یعنی کد زیر:


RewriteEngine On
RewriteBase /site
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ category.php?cat1=$1 [L,NC,QSA]

MMSHFE
یک شنبه 10 آذر 1392, 15:44 عصر
RewriteEngine On
RewriteBase /site
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/(.+)$ category.php?cat1=$1&cat2=$2 [L,NC,QSA]
RewriteRule ^(.+)$ category.php?cat1=$1 [L,NC,QSA]

14morteza14
یک شنبه 10 آذر 1392, 16:55 عصر
ممنون اما الان هر دو حالت به هم ریختش !

MMSHFE
دوشنبه 11 آذر 1392, 08:22 صبح
بهم ریخته است یعنی چی؟ Rewriteها که مشکلی ندارن. اگه سایتتون بهم ریخته بالا میاد بخاطر اینه که آدرسهاتون رو توی اسکریپت درست ننوشتین ولی اگه Error 500 میگیرین، باید ببینیم مشکل Rewriteها کجاست.

Veteran
دوشنبه 11 آذر 1392, 09:02 صبح
ممنون الان لینک زیر کار می کنه:

http://localhost/site/realstate
اما لینک زیر رو که تعریف می کنم:

<a href="/realstate">تست</a>

وقتی روش کلیک می کنم به صورت زیر تو مرورگر باز می شه و پیغام not found رو مرورگر نمایش می ده !

http://localhost/realstate
اگه هم به صورت زیر تعریف کنم:


<a href="site/realstate">تست</a>
بعد کلیلک تو مرورگر به صورت:

http://localhost/site/site/realstate
میاد که باز not found میده!
اینو تست کنید

<a href="realstate">تست</a>
برای به هم ریختگی سایت(css) هم از

<base href="http://www.site.ir/">
استفاده کن
ببین درست میشه ؟

14morteza14
دوشنبه 11 آذر 1392, 09:38 صبح
بهم ریخته است یعنی چی؟ Rewriteها که مشکلی ندارن. اگه سایتتون بهم ریخته بالا میاد بخاطر اینه که آدرسهاتون رو توی اسکریپت درست ننوشتین ولی اگه Error 500 میگیرین، باید ببینیم مشکل Rewriteها کجاست.
ضمن سلام و وقت بخیر
به هم می ریزه یعنی اینکه صفحه index.php من فایل css رو لود نمی کنه و حساب کنید چه بلایی سر ظاهر صفحه میاد دیگه!!!

14morteza14
دوشنبه 11 آذر 1392, 09:50 صبح
اینو تست کنید

<a href="realstate">تست</a>برای به هم ریختگی سایت(css) هم از

<base href="http://www.site.ir/"> استفاده کن
ببین درست میشه ؟
ممنون و اینکه من الان آدرس base رو اینجور دادم:

<base href="http://localhost/site/" />
این کار برای لینک های:

<a href="realstate">تست</a>
جوابگو بود. اما برای لینک های:

<a href="/realstate/1">تست</a></li>
نه. وقتی موس روش می ره آدرس:

http://localhost/realstate/1
رو نمایش می ده!

MMSHFE
دوشنبه 11 آذر 1392, 10:18 صبح
اینطوری بنویسید:

<a href="realstate/1">تست</a>

MMSHFE
دوشنبه 11 آذر 1392, 10:19 صبح
ضمناً base href ربطی به Loadشدن CSS نداره. باید مسیر CSS رو کامل بدین. مثلاً :

<link href="http://localhost/site/style.css" rel="stylesheet" type="text/css" />

14morteza14
دوشنبه 11 آذر 1392, 10:37 صبح
جناب مهندس با تشکر
اما احتمال می دم مشکل به خاطر کد:

RewriteRule ^(.+?)/(.+)$ category.php?cat1=$1&cat2=$2 [L,NC,QSA]
است چون وقتی این کد رو به htaccess اضافه می کنم حتی آدرس css سایت، که در مرورگر می نویسم اصلا اجرا نمی شه. یعنی آدرس زیر:

http://localhost/site/css/main.css
به جاش صفحه index.php اجرا می شه اون هم بدون اعمال css که یک شکل به هم ریخته می شه!

MMSHFE
دوشنبه 11 آذر 1392, 11:19 صبح
قاعدتاً نباید مشکلی باشه ولی برای اطمینان بیشتر این دستور رو هم قبل از RewriteRuleها اضافه کنید:

RewriteCond %{REQUEST_URI} !\.(css|pdf|gif|ico|jpg|js|png|swf|pdf|txt|php)$

14morteza14
دوشنبه 11 آذر 1392, 11:35 صبح
الان:

http://localhost/site/css/main.css
اجرا می شه. آدرس css رو تو index.php به طور کامل دادم. اما باز صفحات سایت بدون اعمال css داره اجرا می شه. واسه همین به هم ریخته است.

MMSHFE
سه شنبه 12 آذر 1392, 09:52 صبح
توی Firebug ببینید CSS بارگذاری شده یا نه. یک نسخه از سورس کد صفحه هم اینجا بگذارین ببینیم مشکل از کجاست (قسمت Head که قالب رو توش بارگذاری کردین).

14morteza14
جمعه 15 آذر 1392, 22:39 عصر
با تشکر
توی Firebug هم CSS بارگذاری نشده!!!

MMSHFE
شنبه 16 آذر 1392, 08:46 صبح
پس مشکل از آدرسهاست. اگه ممکنه TeamViewer بدین (توی پیام خصوصی) تا به سیستمتون وصل بشم و ببینم مشکل از کجاست.