PDA

View Full Version : یک مشکل با .htaccess + یه سوال راجب mysql



theboy
جمعه 22 دی 1391, 09:44 صبح
سلام.
آقا به یه مشکل با .htaccess بر خوردم!

این کد منه:



RewriteRule ^post/(.*)$ ./single.php?id=$1

RewriteCond %{HTTP_HOST} ^(^.*)\.domain.com
RewriteRule (.*) blog.php?blogurl=%1


خوب طبق کد بالا من می خوام هروقت زده شد:
some.domain.com
بشه این:
blog.php?blogurl=domain
و از طرفی هم می خوام وقتی زده شد:
post/100
بشه این:
single.php?id=100

حالا هر دو کد بالا کار می کنند ولی دومیه(post) فقط در دامین اصلی کار می کنه!
یعنی اینطوری بشه کار نمی کنه:
some.domain.com/post/100

اون موقع اینجوری نمیشه:
some.domain.com/single.php?id=100

مشکل کجاست؟





سوال بعدی اینکه چطور میشه برای mysql یه فیلد A_I ساخت(همونی که اتوماتیک عددش زیاد میشه) به طوری که با یکی دیگه از فیلد ها هماهنگ باشه! مثلا یه فیلد داریم با نام BLOG_ID می خوام تمام پست هایی که BLOG_IDشون مساویه از 1 شمارده بشن. مثلا اگر 5 تا پست داشته باشیم 3تاشون BLOG_IDی 1 داشته باشن، اون 3پست از 1تا3 شماره بگیرن، واگر 2تاشون BLOG_IDی 2 داشته باشن اون 2پست شماره های 1و2 بگیرن.

colors
جمعه 22 دی 1391, 11:18 صبح
سوال بعدی اینکه چطور میشه برای mysql یه فیلد A_I ساخت(همونی که اتوماتیک عددش زیاد میشه) به طوری که با یکی دیگه از فیلد ها هماهنگ باشه! مثلا یه فیلد داریم با نام BLOG_ID می خوام تمام پست هایی که BLOG_IDشون مساویه از 1 شمارده بشن. مثلا اگر 5 تا پست داشته باشیم 3تاشون BLOG_IDی 1 داشته باشن، اون 3پست از 1تا3 شماره بگیرن، واگر 2تاشون BLOG_IDی 2 داشته باشن اون 2پست شماره های 1و2 بگیرن.

در مورد سوال اولت مطمئنی؟!

در مورد سوال دوم هم بگم که اگه از طریق PhpMyAdmin جدولت رو میسازی، فیلدی رو که auto increment میخوای باشه، باید تیک گزینه AUTO_INCREMENT رو بزنی ( فعالش کنی ).
اگه با php جدولهاتو میسازی فقط کافیه مقدار AUTO_INCREMENTرو جلوی نام فیلدت قرار بدی. مث زیر

$query = "CREATE TABLE `post` (
post_id INTEGER NOT NULL AUTO_INCREMENT,
post_title VARCHAR(255) NOT NULL
)";
و اگه بخوای اونروهم کلید اصلی قرار بدی، مث زیر

$query = "CREATE TABLE `post` (
post_id INTEGER NOT NULL AUTO_INCREMENT,
post_title VARCHAR(255) NOT NULL,

PRIMARY KEY (post_id)
)";


مثلا یه فیلد داریم با نام BLOG_ID می خوام تمام پست هایی که BLOG_IDشون مساویه از 1 شمارده بشن. مثلا اگر 5 تا پست داشته باشیم 3تاشون BLOG_IDی 1 داشته باشن، اون 3پست از 1تا3 شماره بگیرن، واگر 2تاشون BLOG_IDی 2 داشته باشن اون 2پست شماره های 1و2 بگیرن.
معمولا همچین چیزی پیش نمیاد، چون کسی که دیتابایس رو ساخته حداقل اینو میدونسته که چندتا پست یه id مشابه ندارن. اصلا id ها برای این به وجود آمدن که داخل یه جدول، سطرهارو منحصر به فرد ( یکتا ) کنه و بشه از طریق یک id به یک سطر خاص دسترسی پیدا کرد. میشه گفت هر سطری داخل یک جدول باید id منحصر به فردی داشته باشه

theboy
جمعه 22 دی 1391, 11:24 صبح
در مورد سوال اولت مطمئنی؟!

در مورد سوال دوم هم بگم که اگه از طریق PhpMyAdmin جدولت رو میسازی، فیلدی رو که auto increment میخوای باشه، باید تیک گزینه AUTO_INCREMENT رو بزنی ( فعالش کنی ). اگه با php جدولهاتو میسازی فقط کافیه مقدار AUTO_INCREMENTرو جلوی نام فیلدت قرار بدی. مث زیر

$query = "CREATE TABLE `post` (
post_id INTEGER NOT NULL AUTO_INCREMENT,
post_title VARCHAR(255) NOT NULL
)";
و اگه بخوای اونروهم کلید اصلی قرار بدی، مث زیر

$query = "CREATE TABLE `post` (
post_id INTEGER NOT NULL AUTO_INCREMENT,
post_title VARCHAR(255) NOT NULL,

PRIMARY KEY (post_id)
)";


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

بله کاملا مطمئنم.

راجب سوال دوم:
پس چطوری تشخصی بدم که فلان پست چندمین پست فلان وبلاگ هست؟
که اینطوری بشه:
blog.domain.com/post/101

colors
جمعه 22 دی 1391, 11:39 صبح
بله کاملا مطمئنم.
راجب سوال دوم:
پس چطوری تشخصی بدم که فلان پست چندمین پست فلان وبلاگ هست؟
که اینطوری بشه:
blog.domain.com/post/101
در مورد سوال اول باید بگم که، اگه بخوای از ( post/100 ) به ( single.php?id=100 ) تبدیل بشی، باید کدهای HTML و لینکهات رو ویرایش کنی و دیگه ربطی به htaccess نداره.
سوال دوم :
آها پس قضیه فرق میکنه. تو سیستمهای وبلاگ دهی دوتا فیلد رو برای بخش پستش قرار میدن. مثلا یکی که آی دی وبللاگ رو داره و یکی هم که آی دی پست رو داره. الان توضیح خاصی نمیشه داد تا اینکه ساختار جدول هات رو دید.

theboy
جمعه 22 دی 1391, 12:20 عصر
در مورد سوال اول باید بگم که، اگه بخوای از ( post/100 ) به ( single.php?id=100 ) تبدیل بشی، باید کدهای HTML و لینکهات رو ویرایش کنی و دیگه ربطی به htaccess نداره.
سوال دوم :
آها پس قضیه فرق میکنه. تو سیستمهای وبلاگ دهی دوتا فیلد رو برای بخش پستش قرار میدن. مثلا یکی که آی دی وبللاگ رو داره و یکی هم که آی دی پست رو داره. الان توضیح خاصی نمیشه داد تا اینکه ساختار جدول هات رو دید.
میشه راجب سوال اول یه مثال بزنی؟

راجب سوال دوم:
من برای هر پست یه سری جدول مرتبط با آی دی دارم:
آیدی پست(که a_i هست)-آیدی وبلاگ(وبلاگی که پست برای اونه)-آیدی نویسنده. حالا موندم چطوری باید تشخیص بدم که چندمین پست وبلاگه!

colors
جمعه 22 دی 1391, 12:38 عصر
میشه راجب سوال اول یه مثال بزنی؟

راجب سوال دوم:
من برای هر پست یه سری جدول مرتبط با آی دی دارم:
آیدی پست(که a_i هست)-آیدی وبلاگ(وبلاگی که پست برای اونه)-آیدی نویسنده. حالا موندم چطوری باید تشخیص بدم که چندمین پست وبلاگه!

حتما.
الان من دقیقا نمیدونم طراحی سایت شما چگونه و بر اساس چه نوع معاری هست یا نیست، ولی این رو درنظر میگیریم که صفحه لیست پست های وبلاگ ها مث زیر است. یعنی فقط HTML هست.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Blog 1</title>
</head>

<body>
<a href="http://www.site.com/post/100">پست شماره 1</a>
<a href="http://www.site.com/post/101">پست شماره 2</a>
<a href="http://www.site.com/post/102">پست شماره 3</a>
</body>
</html>
دقت کنید که آدرس لینکهارو مطلق ( کامل ) در نظر گرفتم که بهتر متوجه بشین.
خب الان اگه شما رو لینکی کلیک کنید به آدرس مثلا http://www.site.com/post/100 میرین، در صورتی که شما میخواین به آدرس http://www.site.com?post=100 برین. در واقعیت آدرس اصلی و واقعی شما همین http://www.site.com?post=100 هست و خود شما سایت رو مجبور کردین که با استفاده از htaccess به آدرس http://www.site.com/post/100 تبدیل بشه و همچنین htaccess برای این کار شمارو مجبور میکنه که آدرس لینکهاتونو ( html ) به http://www.site.com/post/100 تغییر بدین. الان شما فقط باید کدهای HTML تون رو پیدا کنید و مثل زیر ویرایشش کنید(طبق کد بالا)

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Blog 1</title>
</head>

<body>
<a href="http://www.site.com?post=100">پست شماره 1</a>
<a href="http://www.site.com?post=101">پست شماره 2</a>
<a href="http://www.site.com?post=102">پست شماره 3</a>
</body>
</html>

در مورد سوال دوهم عرض کردم که باید ساختار جدولهاتونو ببینم. نه فقط من بلکه همه دوستان دیگه هم تا جداول شمارو نبینن، نمیتونن راهنمایی درستی بکنن

theboy
جمعه 22 دی 1391, 13:39 عصر
حتما.
الان من دقیقا نمیدونم طراحی سایت شما چگونه و بر اساس چه نوع معاری هست یا نیست، ولی این رو درنظر میگیریم که صفحه لیست پست های وبلاگ ها مث زیر است. یعنی فقط HTML هست.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Blog 1</title>
</head>

<body>
<a href="http://www.site.com/post/100">پست شماره 1</a>
<a href="http://www.site.com/post/101">پست شماره 2</a>
<a href="http://www.site.com/post/102">پست شماره 3</a>
</body>
</html>
دقت کنید که آدرس لینکهارو مطلق ( کامل ) در نظر گرفتم که بهتر متوجه بشین.
خب الان اگه شما رو لینکی کلیک کنید به آدرس مثلا http://www.site.com/post/100 میرین، در صورتی که شما میخواین به آدرس http://www.site.com?post=100 برین. در واقعیت آدرس اصلی و واقعی شما همین http://www.site.com?post=100 هست و خود شما سایت رو مجبور کردین که با استفاده از htaccess به آدرس http://www.site.com/post/100 تبدیل بشه و همچنین htaccess برای این کار شمارو مجبور میکنه که آدرس لینکهاتونو ( html ) به http://www.site.com/post/100 تغییر بدین. الان شما فقط باید کدهای HTML تون رو پیدا کنید و مثل زیر ویرایشش کنید(طبق کد بالا)

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Blog 1</title>
</head>

<body>
<a href="http://www.site.com?post=100">پست شماره 1</a>
<a href="http://www.site.com?post=101">پست شماره 2</a>
<a href="http://www.site.com?post=102">پست شماره 3</a>
</body>
</html>

در مورد سوال دوهم عرض کردم که باید ساختار جدولهاتونو ببینم. نه فقط من بلکه همه دوستان دیگه هم تا جداول شمارو نبینن، نمیتونن راهنمایی درستی بکنن

نه شما راجب سوال اول منظور من رو اشتباه فهمیدید!
آدرس باید این باشه:

site.com?post=100
ولی من می خوام این باشه:

site.com/post/100

پس باید با .htaccess اینکارو بکنم. این کار برای سایت اصلی (site.com) جواب میده ولی برای وبلاگ ها خیر: blog.site.com/post/100 در واقع میشه این: site.com/blog.php?url=blog یعنی من می خوام یه جوری شرط بذارم(در htaccess) که اگر آدرس این بود:
blog.site.com
بشه این:
site.com/blog.php?url=blog
(یعنی آدرس اولیه باشه و در مرورگر هم نمایش داده بشه ولی در اصل دومیه باشه!)

ولی اگر این بود:
blog.site.com/post/100
بشه این:
site.com/single.php?post=100&blogurl=blog

theboy
جمعه 22 دی 1391, 19:32 عصر
خوب مشکل اول رو خودم حل کردم.

یکی سوال دومم رو جواب بده!

سوال:
چطوری می تونم تشخصی بدم فلان پست(صرفا آخرین نیست) چندمین پستی هست که idش مساوی مثلا 1 هست.

theboy
جمعه 22 دی 1391, 21:23 عصر
مشکل دوم هم حل شد!

راه حل:
تمام پست هایی که blog_idشون یه عدده خاصی هست رو میشماریم + 1 می کنیم میریزیم تو یه متغیر و اونو می ریزیم تو یه فیلد از پست ها!

ممنون از همه.