PDA

View Full Version : سوال: ساخت Subdomain بوسیله htaccess



milworm
سه شنبه 08 تیر 1389, 21:59 عصر
سلام دوستان
چطور میشه بوسیله ماژول rewrite در htaccess یک subdomain مجازی ساخت؟

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


<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC]
RewriteRule (.*) %2/$1 [L]
</IfModule>

pestilencia
سه شنبه 08 تیر 1389, 22:35 عصر
شما باید یه فایل بسازی به اسم htaccess. بعد این رو تو هر فولدری از سرور که قرار بدی تو این شاخه و تمام زیرشاخه‌هاش اعمال می‌شه. البته خب قبل‌ش شما باید Domain Alias رو از کنترل پنل هاست‌تون ساخته باشین.

htaccess. شامل


RewriteEngine On

RewriteCond %{HTTP_HOST} ^subdomain\.domian\.tld
RewriteRule ^(.*)$ /subdomain/$1


این ساده‌ترین ماژول mod_rewriteه که می‌تونی استفاده کنی.

http://httpd.apache.org/docs/2.2/rewrite/
http://httpd.apache.org/docs/2.2/rewrite/rewrite_guide.html
http://httpd.apache.org/docs/2.2/rewrite/rewrite_guide_advanced.html

milworm
چهارشنبه 09 تیر 1389, 07:22 صبح
با تشکر از راهنماییتون ولی یه سوال:
منظورتون از ساختن Domain Alias در کنترل پنل هاست چیه؟
Domain Alias کنترل پنل من فعال هست ولی من نمی خوام بصورت دستی subdomain بسازم، می خوام توسط یک متغیر در php با ماژول rewrite اینکارو انجا بدم.
راستی کد زیر رو می تونم بجای آن کد خط آخری که شما در مثال بالایی آوردین استفاده کنم؟
مثلا:

RewriteRule ^(.*)/$ /test.php?page=$1

mohkami
چهارشنبه 09 تیر 1389, 13:07 عصر
یه سوال در مورد rewrite.
من فایل htaccess رو توی root قرار دادم و محتوایش اینه:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule old\.html$ new.html
</IfModule>
ولی وقتی فایل html ای از فولدر old رو توی browser میزنم محتوای همون فایل رو نشون میده و فایل new.html رو نشون نمیده.
من از Wamp استفاده میکنم.
ممنون

Reza1607
چهارشنبه 09 تیر 1389, 13:16 عصر
توی فایل httpd.conf عبارت زیر رو پیاده کن

AllowOverride None
و None رو پاک کنم و به جاش All بذار ببین درست می شه

mohkami
چهارشنبه 09 تیر 1389, 14:01 عصر
آقا رضا ممنون از پاسختون، اما باز هم کار نمیکنه.

pestilencia
چهارشنبه 09 تیر 1389, 14:46 عصر
منظورتون از ساختن Domain Alias در کنترل پنل هاست چیه؟


ببینین آدرس سایت شما هست: www.domain.com بعد شما می‌خواین که sub.domain.com رو فعال کنین. واسه این‌کار شما دو تا راه دارین.
۱) از تو کنترل‌پنل هاست ساب‌دومین به اسم sub بسازین
۲) باز هم از تو کنترل‌پنل دومین آلیاس به اسم sub.domain.com بسازین

ولی در هر صورت، شما باید یکی از این دو کار رو انجام بدین.

تو هر دو حالت، خروجی شما برای بازدیدکننده فرقی نمی‌کنه. با هر دوتاش هم شما می‌تونین mod_rewrite رو استفاده کنین. ولی برای اولی شما htaccess رو باید تو روت‌دایرکتوری ساب‌دومین قرار بدین، دومی رو تو روت‌دایرکتوری سایت.



RewriteRule ^(.*)/$ /test.php?page=$1

این یک خط میاد برای نشون دادن تمام آدرس‌ها به شکل /sub.domain.com/uri از صفحه test.php?page=uri/ استفاده می‌کنه.




ولی وقتی فایل html ای از فولدر old رو توی browser میزنم محتوای همون فایل رو نشون میده و فایل new.html رو نشون نمیده.


اگه می‌خوای کل صفحات از دایرکتوری old به new منتقل بشه راهش اینه:


RewriteEngine On

RewriteRule ^/old/(.*)\.html$ /new/$1\.html [L,R=301]

اون R=301 هم داره به search engine میگه که HTTP Statusه این صفحه ۳۰۱ه. که duplicate نشه اطلاعات سایت‌تون تو سرچ اِنجین.

اگه هم این نیست منظورت، خب چیه پس؟‌ :)

کلا لینک دومی رو که فرستادم مطالعه کنین. با کلی مثال و حالت‌های مختلف توضیح داده.

mohkami
چهارشنبه 09 تیر 1389, 16:19 عصر
سالم ممنون از جوابتون ولی من میخوام کل صفحات از دایرکتوری old به صفحه new.html که در root وجود داره منتقل بشه که فایل htaccess زیر هم کار نمیکنه


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^/old/(.*).html$ new.html [L,R=301]
</IfModule>
و همون فایلی که تو old هست رو نشون میده مثلاً من وقتی میزنم

http://localhost/old/1.htmlانتظار دارم که محتویات صفحه

http://localhost/new.htmlرو نشون بده

milworm
چهارشنبه 09 تیر 1389, 17:09 عصر
ممنون از پاسختون
این کدی که شما نوشتی برای این هست که شما subdomain را ساختین و دارید ازش استفاده می کنید. ولی من منظورم subdomain مجازی هست!
مثل سایت های سرویس دهنده وبلاگ، تا عضو می شی نام کاربریت میشه subdomain!!!:کف::متعجب:

pestilencia
چهارشنبه 09 تیر 1389, 17:14 عصر
این رو امتحان کن:



RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.domian.com
RewriteRule ^old/([a-zA-Z0-9_-]+)\.html$ new\.html [L,R=301]


ایرادهایی که داره:
۱) شروع آدرس برای RewriteRule احتیاجی به / نداره
۲) نقطه (.) رو اگه می‌خوای استفاده مستقیم کنی (مثلا همون: new.html) باید از RegExp استفاده کنی و حتما .\ بنویسی‌ش.

- وقتی می‌خوای اسم فایل رو باز بذاری که هر حالتی اتفاق افتاد این Rule روش اجرا بشه اینجوری:


([a-zA-Z0-9_-]+)

بنویسی بهتره تا اینجوری:



(.*)


پ.ن: کشف کردم که \ رو اگه اینجا تو تگ [ PHP ] بنویسی تحت هیچ شرایطی نشونش نمی‌ده، به خاطر همین تو پست قبلی هم اشتباه شده بود که من دقت نکرده بودم!

pestilencia
چهارشنبه 09 تیر 1389, 17:32 عصر
این رو ببین Milworm
http://httpd.apache.org/docs/2.2/rewrite/rewrite_guide.html#uservhosts

mohkami
چهارشنبه 09 تیر 1389, 17:35 عصر
باز هم تشکر از لطفتون،
باز هم جواب نمیده،ببینید با تک نقطه و اینها فک نکنم مشکلی داشتده باشه مثلاً با htaccess زیر:


RewriteEngine On
RewriteBase /
RewriteRule \.html$ new.html

من تمامی فایلهای html درون زیر شاخه های اولی root رو به new.html منتقل میکنم بدون هیچ مشکلی،مشکل من تعیین نام خاصی برای اون شاخه هست.
باز هم ممنون

mohkami
چهارشنبه 09 تیر 1389, 18:31 عصر
با سلام و تشکر از آقا رضا و pestilencia
مشکل حل شد:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^old/(.*)html$ new.html
</IfModule>