ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์CMS & Free Scriptมาทำ Mod_Rewrite ใน SMF แบบง่ายๆ ครับ
หน้า: [1] 2   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: มาทำ Mod_Rewrite ใน SMF แบบง่ายๆ ครับ  (อ่าน 5761 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« เมื่อ: 05 มกราคม 2010, 12:23:09 »

เนื่องด้วย ปีใหม่ + ผมมาอยู่ที่นี้นานแล้ว.. ได้อะไรไปก็เยอะ ก็อยากจะตอบแทนบ้าง!
แต่พลังวัตร SEO ก็ยังไม่ถึง ก็ขออนุญาติเอาความสามารถ Programming มาตอบแทนเพื่อนๆ นะครับ Embarrassed

วิธีนี้ไม่ใช่ Pure Rewrite นะครับ ลองอ่านดูน่าจะเข้าใจว่าทำไมผมพูดอย่างนั้น
ผลลัพท์ที่น่าจะได้
example.com/board/1-บอร์ดทดสอบ.html
example.com/topic/2-กระทู้ทดสอบ.html

ผมจับมือทำเลยนะครับ แค่ 2 อย่างก่อน (เหนื่อย)

ลองอ่าน.. ค่อยๆ ทำความเข้าใจนะครับ ประยุกต์ได้เยอะ

มีปัญหา + คำถามก็ลงไว้นะครับ ผมขอตัวไปเรียนก่อน Shocked

ปล. น้องผมเอาไปลงว่าใช้ได้นะครับ

-------

Update!
- ผมแก้ที่ไฟล์ MessageIndex.php -> โดยการใส่
str_replace(array(' ', '#', '+', '?', '%'), array('-', '-', '-', '-', '-'), trim( -ตัวแปร- ))
จุดประสงค์ก็คือ เปลี่ยนอักษร #,+,?,% และช่องว่าง ให้เป็น - ไปซะ เวลาผ่านลิ้งจะได้ไม่มีปัญหา
ทดสอบแล้วว่าใช้ได้ในระดับนึงนะครับ (ไม่กล้ายืนยัน 100% เพราะผมทดสอบคนเดียว)


-------
ผมใช้ Appserv 2.5.2 นะครับ เป็นตัวอย่าง
โค๊ด:
root dir: C:\AppServ\www\Lab\SMF

เอาละครับ เริ่มจาก SMF 1.1.11 เพิ่งลดสดๆ หมาดๆ เลยครับ^^"
ผมโมภาษาอังกฤษนี้แหละนะครับ ไม่ต่างกัน

เราจะลองทำทีละขั้นนะครับ ลองกัดสดๆ ขั้นตอนไหนไม่ได้ก็แก้ปัญหาไป
ขั้นแรก! ออกแบบ URL ครับ!
ในตัวอย่างผมจะใช้แบบนี้ครับ
โค๊ด:
bbslab/board/1-General-Discuzz.html <--- ใช้เวลาเลือกเว็บบอร์ด
bbslab/topic/123453-สวัสดีชาวโลก.html <--- ใช้เวลาเลือกกระทู้ครับ

ขั้นที่สอง! มั่ว .htaccess ทำ Mod_Rewrite ครับ
เพิ่มไฟล์ .htaccess ไว้ที่ root โฟลเดอร์
ในที่นี้ก็คือ -> C:\AppServ\www\Lab\SMF\.htaccess

ผมลองเขียนเนื้อหาไปว่า
โค๊ด:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^board/(\d+)-.+\.html index.php?board=$1 [L]
RewriteRule ^topic/(.+?)-.+\.html index.php?topic=$1 [L]
</IfModule>
ลองมั่ว regexp เอานะครับ ผมพูดตรงๆ อีกแล้วว่า ผมมั่วมาคร้าบบบบ (เทพๆ อย่าแอบยิ้มนะครับผมอาย)

เรามาลอง url โดยการพิมพ์เข้าไปที่ address bar ครับ แบบในรูปเลยครับ



ปรากฏว่าหน้าเข้าบอร์ดเปลี่ยนไปตามที่คำนวณมาอย่างเนิ่นนาน หึๆ (แล้วตะกี้ใครมันว่ามั่ว(วะ))
ลอง url ของหน้ากระทู้บ้างครับ




เข้ามาได้ครับ! เป็นอันว่าการออกแบบ url ผ่านครับ!!
(ในส่วนการออกแบบ url ท่านเอาไปประยุกต์ต่อได้เองตามสบายเลยครับ ต้องฝึกแก้ mod_rewrite แค่นั้นเอง)

*Note: บางท่านอาจจะสังเกตุเห็นแล้วว่า คีย์จริงๆ ของการ mod_rewrite แบบนี้ก็คือเลขที่อยู่ข้างหน้ากระทู้เองครับ! (กับต้องลงท้ายด้วย .html)
ไอตรงส่วนข้อความ ไม่ได้เอามาคิดอะไรเลย! เป็นคำพูดหลอกๆ ให้รู้ว่าลิ้งนั่นเกี่ยวกับอะไรเฉยๆ ตัวประมวลผลจริงๆ คือเลขครับ
bbslab/board/1-General-Discuzz.html หากท่านเปลี่ยนเป็น bbslab/board/1-อ็อด-อ็อด.html ก็ยังคงเข้าได้ครับ (เลข 1 เหมือนเดิม ลงด้วย .html เหมือนเดิม)

ต่อเนื่องนะครับ ขั้นตอนที่ 3!
ขั้นตอนที่เหลืออยู่มีเพียงแค่ว่า เราจะต้องแก้ลิ้งที่แสดงในเว็บบอร์ด จากเดิมที่เป็น
?board=xx, ?topic=xx
ให้เป็นในฟอแมทของเรา
ก่อนอื่นเราต้องไปเคลียร์ url หน้าแรกของบอร์ดก่อนครับ! ให้เราเปิด Sources/QueryString.php (ในที่นี้จะอยู่ตำแหน่ง C:\AppServ\www\Lab\SMF\Sources\QueryString.php)
ค้นหา ->
$scripturl $boardurl . &#39;/index.php&#39;;
แล้วแก้ไขเป็น ->
$scripturl $boardurl . &#39;/&#39;;

ต่อมาเริ่มจากหน้าแรกบอร์ดครับ ต้องแก้ที่ไฟล์ Sources/BoardIndex.php (ในที่นี้จะอยู่ตำแหน่ง C:\AppServ\www\Lab\SMF\Sources\BoardIndex.php)
ค้นหา ->
$this_category[$row_board[&#39;ID_BOARD&#39;]] = array(
ค้นมาเรื่อยๆ จะเจอ
&#39;href&#39; => $scripturl . &#39;?board=&#39; . $row_board[&#39;ID_BOARD&#39;] . &#39;.0&#39;,
&#39;link&#39; => &#39;<a href="&#39; . $scripturl . &#39;?board=&#39; . $row_board[&#39;ID_BOARD&#39;] . &#39;.0">&#39; . $row_board[&#39;boardName&#39;] . &#39;</a>&#39;
ก็ให้แก้ไขเป็น
&#39;href&#39; => $scripturl . &#39;board/&#39; . $row_board[&#39;ID_BOARD&#39;] . &#39;-&#39; . $row_board[&#39;boardName&#39;] . &#39;.html&#39;,
&#39;link&#39; => &#39;<a href="&#39; . $scripturl . &#39;board/&#39; . $row_board[&#39;ID_BOARD&#39;] . &#39;-&#39; . $row_board[&#39;boardName&#39;] . &#39;.html">&#39; . $row_board[&#39;boardName&#39;] . &#39;</a>&#39;

ต่อมา ค้นหา ->
$this_category[$row_board[&#39;ID_PARENT&#39;]][&#39;children&#39;][$row_board[&#39;ID_BOARD&#39;]] = array(
จะเจอเหมือนข้างบนเลยครับ แล้วก็แก้ด้วยวิธีเดียวกัน

มีขอระวังเล็กน้อยก็คือว่า ท่านต้องสังเกตุนะครับว่า 'link' ที่ท่านกำลังแก้ มันเป็นของ Board หรือ Topic หรือ User!
แล้วดูยังไง ?
&#39;href&#39; => $scripturl . &#39;?board=&#39; . $row_board[&#39;ID_BOARD&#39;] . &#39;.0&#39;,
<--- ของบอร์ดชัดเลยครับ (?board=)
ในส่วนนี้ให้ท่านแก้แค่บอร์ดก่อนครับ ตามวิธีการด้านบน อย่าเพิ่งเก่งแก้ topic ด้วยครับ

พอแก้หมดแล้วลองรีเฟรชบอร์ด แล้วทดสอบดูครับ ดังรูป



พบว่า url เปลี่ยนไปแล้ว ก็ลองคลิกๆ ดูครับ เข้าได้จริงไหม!

ขั้นตอนนี้ เอาให้เคลียก่อนนะครับ !!

ต่อมาเราจะแก้ของ Topic ครับ โดยยังยึดที่ไฟล์เดิมครับ BoardIndex.php
คราวนี้ค้นหา ->
?topic=
จะเจอ
$this_last_post[&#39;href&#39;] = $scripturl . &#39;?topic=&#39; . $row_board[&#39;ID_TOPIC&#39;] . &#39;.msg&#39; . ($user_info[&#39;is_guest&#39;] ? $modSettings[&#39;maxMsgID&#39;] : $row_board[&#39;new_from&#39;]) . (empty($row_board[&#39;isRead&#39;]) ? &#39;;boardseen&#39; : &#39;&#39;) . &#39;#new&#39;;

ก็แก้เป็น
$this_last_post[&#39;href&#39;] = $scripturl . &#39;topic/&#39; . $row_board[&#39;ID_TOPIC&#39;] . &#39;.msg&#39; . ($user_info[&#39;is_guest&#39;] ? $modSettings[&#39;maxMsgID&#39;] : $row_board[&#39;new_from&#39;]) . (empty($row_board[&#39;isRead&#39;]) ? &#39;;boardseen&#39; : &#39;&#39;) . &#39;-&#39;.$row_board[&#39;short_subject&#39;].&#39;.html#new&#39;;

ผมเปลี่ยน
?topic=
เป็น
topic/
แล้วก็เติม
&#39;-&#39;.$row_board[&#39;short_subject&#39;].&#39;.html#new&#39;;
เพื่อสร้าง title ต่อท้ายเลข 1 แล้วก็ปิดด้วย .html ตามสูตร

ค้นต่อไปคับ จะเจอ
$this_event[&#39;href&#39;] = $this_event[&#39;topic&#39;] == 0 ? &#39;&#39; : $scripturl . &#39;?topic=&#39; . $this_event[&#39;topic&#39;] . &#39;.0&#39;;

อันนี้ไม่สนใจครับ เป็นส่วยย่อยใน Calendar (ท่านจะทำก็ได้ แต่ผมไม่ทำคับ ขี้เกียจ -> เหตุผลง่ายไหมครับ)

หมดแล้วครับ สำหรับหน้าแรก ลองเปิดบอร์ดมาเลยครับ ลองกดๆ ดูว่าติดอะไรไหม ถ้าไม่ติดเราจะเข้าไปแก้อีกหน้านึงครับ (วิธีนี้แก้แค่ 2 หน้าก็พอครับ!)

--- หน้าแรกมันแค่เด็กๆ ครับ อีกหน้านึงอ้วกแน่!
คราวนี้มาแก้ที่ไฟล์ MessageIndex.php (ในที่นี้อยู่ที่ C:\AppServ\www\Lab\SMF\Sources\MessageIndex.php)

เราจะทำ Board ก่อนเหมือนเดิมนะครับ ค้นหา ->
?board=
(อันที่ผมไม่พูดถึง ผมไม่ทำนะครับ เราหวังผลเสียวอย่างเดียว ไม่ได้หวังเอาบอร์ดเทพ)

จนกว่าจะเจอ
&#39;href&#39; => $scripturl . &#39;?board=&#39; . $row_board[&#39;ID_BOARD&#39;] . &#39;.0&#39;,
&#39;link&#39; => &#39;<a href="&#39; . $scripturl . &#39;?board=&#39; . $row_board[&#39;ID_BOARD&#39;] . &#39;.0">&#39; . $row_board[&#39;name&#39;] . &#39;</a>&#39;

แก้ไขเป็น
&#39;href&#39; => $scripturl . &#39;board/&#39; . $row_board[&#39;ID_BOARD&#39;] . &#39;-&#39; . $row_board[&#39;name&#39;] . &#39;.html&#39;,
&#39;link&#39; => &#39;<a href="&#39; . $scripturl . &#39;board/&#39; . $row_board[&#39;ID_BOARD&#39;] . &#39;-&#39; . $row_board[&#39;name&#39;] . &#39;.html">&#39; . $row_board[&#39;name&#39;] . &#39;</a>&#39;

เจอ
&#39;href&#39; => $scripturl . &#39;?board=&#39; . $row[&#39;ID_BOARD&#39;] . &#39;.0&#39;,
&#39;link&#39; => &#39;<a href="&#39; . $scripturl . &#39;?board=&#39; . $row[&#39;ID_BOARD&#39;] . &#39;.0">&#39; . $row[&#39;name&#39;] . &#39;</a>&#39;

แก้ไขเป็น
&#39;href&#39; => $scripturl . &#39;board/&#39; . $row[&#39;ID_BOARD&#39;] . &#39;-&#39; . $row[&#39;name&#39;] . &#39;.html&#39;,
&#39;link&#39; => &#39;<a href="&#39; . $scripturl . &#39;board/&#39; . $row[&#39;ID_BOARD&#39;] . &#39;-&#39; . $row[&#39;name&#39;] . &#39;.html">&#39; . $row[&#39;name&#39;] . &#39;</a>&#39;

เจอ
$context[&#39;boards&#39;][$row[&#39;ID_PARENT&#39;]][&#39;link_children&#39;][] = &#39;<a href="&#39; . $scripturl . &#39;?board=&#39; . $row[&#39;ID_BOARD&#39;] . &#39;.0">&#39; . $row[&#39;name&#39;] . &#39;</a>&#39;;

แก้ไขเป็น
$context[&#39;boards&#39;][$row[&#39;ID_PARENT&#39;]][&#39;link_children&#39;][] = &#39;<a href="&#39; . $scripturl . &#39;board/&#39; . $row[&#39;ID_BOARD&#39;] . &#39;-&#39;.$row[&#39;name&#39;].&#39;.html">&#39; . $row[&#39;name&#39;] . &#39;</a>&#39;;

ที่แก้มาข้างบนจะใช้ในกรณีเป็น Child Board นะครับ - ช่างมันเถอะ

*****
ต่อมาค้นหา ->
?topic=
จนกว่าจะเจอ
&#39;href&#39; => $row_board[&#39;subject&#39;] != &#39;&#39; ? $scripturl . &#39;?topic=&#39; . $row_board[&#39;ID_TOPIC&#39;] . &#39;.new&#39; . (empty($row_board[&#39;isRead&#39;]) ? &#39;;boardseen&#39; : &#39;&#39;) . &#39;#new&#39; : &#39;&#39;,
&#39;link&#39; => $row_board[&#39;subject&#39;] != &#39;&#39; ? &#39;<a href="&#39; . $scripturl . &#39;?topic=&#39; . $row_board[&#39;ID_TOPIC&#39;] . &#39;.new&#39; . (empty($row_board[&#39;isRead&#39;]) ? &#39;;boardseen&#39; : &#39;&#39;) . &#39;#new" title="&#39; . $row_board[&#39;subject&#39;] . &#39;">&#39; . $short_subject . &#39;</a>&#39; : $txt[470]

แก้ไขเป็น
&#39;href&#39; => $row_board[&#39;subject&#39;] != &#39;&#39; ? $scripturl . &#39;topic/&#39; . $row_board[&#39;ID_TOPIC&#39;] . &#39;.new&#39; . (empty($row_board[&#39;isRead&#39;]) ? &#39;;boardseen&#39; : &#39;&#39;) . &#39;-&#39;.str_replace(array(&#39; &#39;, &#39;#&#39;, &#39;+&#39;, &#39;?&#39;, &#39;%&#39;), array(&#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;), trim($short_subject)).&#39;#new&#39; : &#39;&#39;,
&#39;link&#39; => $row_board[&#39;subject&#39;] != &#39;&#39; ? &#39;<a href="&#39; . $scripturl . &#39;topic/&#39; . $row_board[&#39;ID_TOPIC&#39;] . &#39;.new&#39; . (empty($row_board[&#39;isRead&#39;]) ? &#39;;boardseen&#39; : &#39;&#39;) . &#39;-&#39;.str_replace(array(&#39; &#39;, &#39;#&#39;, &#39;+&#39;, &#39;?&#39;, &#39;%&#39;), array(&#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;), trim($short_subject)).&#39;#new" title="&#39; . $row_board[&#39;subject&#39;] . &#39;">&#39; . $short_subject . &#39;</a>&#39; : $txt[470]

ค้นต่อไป จะเจอ
&#39;href&#39; => $scripturl . &#39;?topic=&#39; . $row[&#39;ID_TOPIC&#39;] . &#39;.new&#39; . (empty($row[&#39;isRead&#39;]) ? &#39;;boardseen&#39; : &#39;&#39;) . &#39;#new&#39;

แก้ไขเป็น
&#39;href&#39; => $scripturl . &#39;topic/&#39; . $row[&#39;ID_TOPIC&#39;] . &#39;.new&#39; . (empty($row[&#39;isRead&#39;]) ? &#39;;boardseen&#39; : &#39;&#39;) . &#39;-&#39;.str_replace(array(&#39; &#39;, &#39;#&#39;, &#39;+&#39;, &#39;?&#39;, &#39;%&#39;), array(&#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;), trim($short_subject)).&#39;.html#new&#39;

ยังต่อเนื่อง
$tmppages[] = &#39;<a href="&#39; . $scripturl . &#39;?topic=&#39; . $row[&#39;ID_TOPIC&#39;] . &#39;.&#39; . $tmpb . &#39;">&#39; . $tmpa . &#39;</a>&#39;;

แก้เป็น
$tmppages[] = &#39;<a href="&#39; . $scripturl . &#39;topic/&#39; . $row[&#39;ID_TOPIC&#39;] . &#39;.&#39; . $tmpb . &#39;-&#39;.str_replace(array(&#39; &#39;, &#39;#&#39;, &#39;+&#39;, &#39;?&#39;, &#39;%&#39;), array(&#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;), trim($tmpa)).&#39;.html">&#39; . $tmpa . &#39;</a>&#39;;

ค้นต่อปายยย
&#39;href&#39; => $scripturl . &#39;?topic=&#39; . $row[&#39;ID_TOPIC&#39;] . &#39;.0&#39;,
&#39;link&#39; => &#39;<a href="&#39; . $scripturl . &#39;?topic=&#39; . $row[&#39;ID_TOPIC&#39;] . &#39;.0">&#39; . $row[&#39;firstSubject&#39;] . &#39;</a>&#39;

แก้เป็น * (ตอนผมลองทำ หลังจากแก้ตรงนี้ url ก็ใช้ได้เลย -> การแก้ที่ผ่านๆ มาใช้ใน child board)
&#39;href&#39; => $scripturl . &#39;topic/&#39; . $row[&#39;ID_TOPIC&#39;] . &#39;-&#39; . str_replace(array(&#39; &#39;, &#39;#&#39;, &#39;+&#39;, &#39;?&#39;, &#39;%&#39;), array(&#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;), trim($row[&#39;firstSubject&#39;])) . &#39;.html&#39;,
&#39;link&#39; => &#39;<a href="&#39; . $scripturl . &#39;topic/&#39; . $row[&#39;ID_TOPIC&#39;] . &#39;-&#39; . str_replace(array(&#39; &#39;, &#39;#&#39;, &#39;+&#39;, &#39;?&#39;, &#39;%&#39;), array(&#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;), trim($row[&#39;firstSubject&#39;])) . &#39;.html">&#39; . $row[&#39;firstSubject&#39;] . &#39;</a>&#39;

ค้นอีก * (อันนี้เป็นแก้ลิ้ง "ข้อความสุดท้าย")
&#39;href&#39; => $scripturl . &#39;?topic=&#39; . $row[&#39;ID_TOPIC&#39;] . ($row[&#39;numReplies&#39;] == 0 ? &#39;.0&#39; : &#39;.msg&#39; . $row[&#39;ID_LAST_MSG&#39;]) . &#39;#new&#39;,
&#39;link&#39; => &#39;<a href="&#39; . $scripturl . &#39;?topic=&#39; . $row[&#39;ID_TOPIC&#39;] . ($row[&#39;numReplies&#39;] == 0 ? &#39;.0&#39; : &#39;.msg&#39; . $row[&#39;ID_LAST_MSG&#39;]) . &#39;#new">&#39; . $row[&#39;lastSubject&#39;] . &#39;</a>&#39;

แก้ไขเป็น
&#39;href&#39; => $scripturl . &#39;topic/&#39; . $row[&#39;ID_TOPIC&#39;] . ($row[&#39;numReplies&#39;] == 0 ? &#39;.0&#39; : &#39;.msg&#39; . $row[&#39;ID_LAST_MSG&#39;]) . &#39;-&#39;.str_replace(array(&#39; &#39;, &#39;#&#39;, &#39;+&#39;, &#39;?&#39;, &#39;%&#39;), array(&#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;), trim($row[&#39;lastSubject&#39;])).&#39;.html#new&#39;,
&#39;link&#39; => &#39;<a href="&#39; . $scripturl . &#39;topic/&#39; . $row[&#39;ID_TOPIC&#39;] . ($row[&#39;numReplies&#39;] == 0 ? &#39;.0&#39; : &#39;.msg&#39; . $row[&#39;ID_LAST_MSG&#39;]) . &#39;-&#39;.str_replace(array(&#39; &#39;, &#39;#&#39;, &#39;+&#39;, &#39;?&#39;, &#39;%&#39;), array(&#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;), trim($row[&#39;lastSubject&#39;])).&#39;.html#new">&#39; . $row[&#39;lastSubject&#39;] . &#39;</a>&#39;

ถึงจะใช้ได้แล้ว แต่ก็ยังค้นหาต่อไป (เผื่อมันไปติดกรณีไหนสักแห่ง -> อยากรู้ท่านต้องอ่าน Comment ครับ -> ผมขี้เกียจแปล -> ง่ายไหมครับ)
&#39;new_href&#39; => $scripturl . &#39;?topic=&#39; . $row[&#39;ID_TOPIC&#39;] . &#39;.msg&#39; . $row[&#39;new_from&#39;] . &#39;#new&#39;,

แก้ไขเป็น
&#39;new_href&#39; => $scripturl . &#39;topic/&#39; . $row[&#39;ID_TOPIC&#39;] . &#39;.msg&#39; . $row[&#39;new_from&#39;] . &#39;-&#39;.str_replace(array(&#39; &#39;, &#39;#&#39;, &#39;+&#39;, &#39;?&#39;, &#39;%&#39;), array(&#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;, &#39;-&#39;), trim($row[&#39;firstSubject&#39;])).&#39;#new&#39;,

เป็นอันว่าเสร็จนะครับ!! อันที่จริงจะพบว่าแก้ไม่ยากเลยถ้าทำ .htaccess ออกมาได้แล้วก็อยู่ที่ขั้นตอนการแก้ไขธีมเท่านั้น
ว่าจะให้มันแสดงลิ้งยังไง ซึ้งส่วนนี้ลองแก้ดูเองได้ครับ! ดู Syntax ไม่ให้ Error แล้วก็ลองรีเฟรชดูเอาเลย ว่า url เป็นไปตามที่เราต้องการไหม!!

แค่นี้ก็ใช้ได้ในระดับหนึ่ง ผมขอทิ้งทวนไว้ให้ลองทำนะครับ
- แก้ "linktree" ให้แสดง url เป็น mod_rewrite
- แก้ subject ของ reply message เป็น subject หลักของ topic นั้นๆ
- ประยุกต์ใช้กับการแสดงรายละเอียด user ต่างๆ

ลองแก้ดูครับไม่ยาก ^^"

--
ขอลง Original Post ไว้หน่อยนะครับ ผมละกลัวจริงๆ ว่ามันจะกลายเป็นผมมาลอกข้อความจากไทยเสียว (ก็บอทแรงซะ wanwan001)
Original Post: http://www.lastwordz.net/blog/SMF-Simple-Mod-Rewrite.htm
« แก้ไขครั้งสุดท้าย: 05 มกราคม 2010, 16:33:01 โดย Luscentz » บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
tapo
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 311
ออฟไลน์ ออฟไลน์

กระทู้: 5,479



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 05 มกราคม 2010, 12:27:14 »

ยังอ่านไม่จบ แต่ก็ขอ +1 ให้ก่อนในน้ำใจอันดีงามครับ  wanwan003
บันทึกการเข้า
fusy_love
Verified Seller
ก๊วนเสียว
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 351



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 05 มกราคม 2010, 12:44:53 »

ขอบคุณมากเลยครับ wanwan017
บันทึกการเข้า

redbulls
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 190
ออฟไลน์ ออฟไลน์

กระทู้: 2,079



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 05 มกราคม 2010, 12:49:15 »

ของผมมีปัญหา คือ พอเว้นช่องว่าง มันจะเปงแบบนี้ครับ
โค๊ด:
โดย%20i18up.html
ทำไงถึงให้เว้นช่องว่าง แล้วไม่มี %20
บันทึกการเข้า

Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 05 มกราคม 2010, 12:52:33 »

ใช้ ฟังชันท์ trim() ครอบไว้ก็ได้ครับ
ตัวอย่าง

เจอ
'href' => $scripturl '?board=' $row['ID_BOARD'] . '.0',
'link' => '<a href="' $scripturl '?board=' $row['ID_BOARD'] . '.0">' $row['name'] . '</a>'

แก้ไขเป็น
'href' => $scripturl 'board/' $row['ID_BOARD'] . '-' trim($row['name']) . '.html',
'link' => '<a href="' $scripturl 'board/' $row['ID_BOARD'] . '-' trim($row['name']) . '.html">' $row['name'] . '</a>'

หรืออาจจะใช้ str_replace(' ', '-', $row['name']) ก็ได้ครับ ขออนุญาติตอบสั้นๆ ก่อน แล้วตอนเย็นจะหาข้อผิดพลาดให้ได้หมดครับ
บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
maxph
สมุนแก๊งเสียว
*

พลังน้ำใจ: 12
ออฟไลน์ ออฟไลน์

กระทู้: 866



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 05 มกราคม 2010, 12:56:23 »

+1 ด้วยเช่นกันครับ
บันทึกการเข้า

รับสร้างบ้าน ฟังเพลง โปรโมทเว็บไซต์ฟรี เกมส์

ด่วน ขายเว็บลงประกาศขายสินค้า pr2 ราคา 8000 บาท พร้อมโฮสและโดเมนให้อีก 1 ปีใครสนใจ pm ถามได้ครับ
redbulls
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 190
ออฟไลน์ ออฟไลน์

กระทู้: 2,079



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 05 มกราคม 2010, 13:06:24 »

ขอลองก่อน +1 ให้เลยครับ เพราะผม หาวิธีแก้ มาตั้งแต่ปีที่แล้ว ยังไม่ได้.
บันทึกการเข้า

amulet
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 55
ออฟไลน์ ออฟไลน์

กระทู้: 3,203



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 05 มกราคม 2010, 13:32:40 »

ถ้าเอาคำว่า board กับ topic ออกจะแหล่มมากเลยครับ
บันทึกการเข้า

ก้ามปู
เสือซุ่มด่า
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 218
ออฟไลน์ ออฟไลน์

กระทู้: 6,195



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 05 มกราคม 2010, 13:36:59 »

ช่วยเขียน robot.txt กันไม่ให้ dup ให้เพื่อนๆหน่อยสิครับ เดี๋ยวเอาไปใช้ทั้งดุ้น เนื้อหาจะซ้ำกันทั้งเว็บได้
บันทึกการเข้า

ตอนนี้ผมไม่ค่อยว่างตอบอะไรใครนะครับ เพราะไม่ได้เข้าบอร์ดเลย
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 05 มกราคม 2010, 15:57:34 »

ของผมมีปัญหา คือ พอเว้นช่องว่าง มันจะเปงแบบนี้ครับ
โค๊ด:
โดย%20i18up.html
ทำไงถึงให้เว้นช่องว่าง แล้วไม่มี %20
ผมแก้ปัญหาโดยการแทนช่องว่างด้วย - นะครับ เพราะถ้าปล่อยเป็นช่องว่างยังไงมันก็จะเข้ารหัสเองอัติโนมัติอยู่ดีเวลา GET (พฤติกรรมของ browser)
ใช้โค๊ดนี้ครับ
str_replace(array(' ''#''+''?'), array('-''-''-''-'), trim($row['name'], chr(160)." \t\n\r\0\x0B"))
**แก้ไขแล้วที่กระทู้แรกเลยนะครับ

ถ้าเอาคำว่า board กับ topic ออกจะแหล่มมากเลยครับ
แล้วแต่คุณจะดีไซน์ url นะครับ + แล้วแต่ความสามารถในการทำ .htaccess
ส่วนตัวที่ผมใช้ topic กับ board เพราะผมว่ามันแยกกันชัดเจนดี ดูแล้วรู้เรื่องว่าจะเข้ากระทู้ไหน..
แต่ไม่แน่ก็อาจหาวิธีดีไซน์ให้มันสั้นลง แต่ยังเสียวซี๊ด (ก็ยังคิดไม่ออก ต้องใช้ไปสักพักก่อนครับ)

ช่วยเขียน robot.txt กันไม่ให้ dup ให้เพื่อนๆหน่อยสิครับ เดี๋ยวเอาไปใช้ทั้งดุ้น เนื้อหาจะซ้ำกันทั้งเว็บได้
มัน dup ยังไงเหรอครับ ชื่อหัวข้อกระทู้หรืออะไรก็เป็นไปตามเนื้อหาของบอร์ดนั้นๆ ครับ อันนี้ไม่ค่อยเข้าใจครับ



สรุป ใครทดสอบแล้วไม่เวิร์ค, ติดอะไร ลองทิ้งคำถามไว้ครับ
« แก้ไขครั้งสุดท้าย: 05 มกราคม 2010, 16:33:55 โดย Luscentz » บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
Putter™
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 421
ออฟไลน์ ออฟไลน์

กระทู้: 2,104



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 05 มกราคม 2010, 23:41:59 »

+1 เลยครับ
บันทึกการเข้า

Ruk-Com Hosting (IAAS)
Ruk-Com Cloud (PAAS)
รีวิวโฮสติ่ง Ruk-Com  จากสมาชิก THAISEO

ไม่พอใจยินดีคืนเงินเต็มจำนวนทุกบริการ
Putter™
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 421
ออฟไลน์ ออฟไลน์

กระทู้: 2,104



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 06 มกราคม 2010, 00:07:12 »

ลงเสร็จแล้วครับ ผ่านไปได้ด้วยดีครับ

ตัวอย่างมาดูได้ตามลายเซ็นครับ


 wanwan020 wanwan020 wanwan020 wanwan020
บันทึกการเข้า

Ruk-Com Hosting (IAAS)
Ruk-Com Cloud (PAAS)
รีวิวโฮสติ่ง Ruk-Com  จากสมาชิก THAISEO

ไม่พอใจยินดีคืนเงินเต็มจำนวนทุกบริการ
expertduck
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 7



ดูรายละเอียด เว็บไซต์
« ตอบ #12 เมื่อ: 06 มกราคม 2010, 00:16:59 »

แจ่มครับ  wanwan016

ปล. $url =  preg_replace('/[^a-z0-9ก-ฯ\-]*/si','-',$url); wanwan020

บันทึกการเข้า

...ใส่ไรไม่ได้เลย อิอิ
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 06 มกราคม 2010, 00:17:46 »

ขอบคุณที่ช่วยหนุนคับ น้องรัก

พี่นึกว่าจะแป๊กซะแล้ว wanwan004


ตัวอย่างดูได้ที่ -> http://www.ruk-com.in.th/ นะครับ ท่านจะลองตั้งกระทู้ทดสอบก็แล้วแต่ครับ น้องผมบอกว่าเปิดให้ทดสอบเต็มที่ wanwan002
บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #14 เมื่อ: 06 มกราคม 2010, 00:19:32 »

แจ่มครับ  wanwan016

ปล. $url =  preg_replace('/[^a-z0-9ก-ฯ\-]*/si','-',$url); wanwan020


ขอบคุณครับ

อันนี้ท่านหมายถึงใช้ output buffering สุดท้ายมาใช้ใช่ไหมครับ


ผมไม่รู้ว่าความเร็วมันจะต่างกันไหมเนี้ยสิ Tongue
บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
mastergtx
สมุนแก๊งเสียว
*

พลังน้ำใจ: 77
ออฟไลน์ ออฟไลน์

กระทู้: 880



ดูรายละเอียด
« ตอบ #15 เมื่อ: 06 มกราคม 2010, 01:01:39 »

Rewrite แบบดิบๆ หน้าสนใจเหมือนกัน
บันทึกการเข้า

ทำเว็บฝรั่ง
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #16 เมื่อ: 06 มกราคม 2010, 01:11:26 »

Rewrite แบบดิบๆ หน้าสนใจเหมือนกัน
มันจะมี rewrite แบบ pure อีกครับ (ในลิ้งจะไม่มีตัวเลข)

เพียงแต่ว่าถ้าเทียบความยาก/ง่ายแล้ว..
แบบนี้จะง่ายกว่าพอสมควรครับ แล้วประยุกต์ได้แล้วแต่ไอเดียผู้นำไปใช้เลย..

url จะยาวกว่าแบบ pure เล็กน้อย แต่ก็เสียวได้หนักเหมือนกันนะ
บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
Nongkhai_tong
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 236
ออฟไลน์ ออฟไลน์

กระทู้: 6,542



ดูรายละเอียด
« ตอบ #17 เมื่อ: 06 มกราคม 2010, 03:49:43 »

ใช้ได้กับ smf 2.0 หรือเปล่าคตรับ
บันทึกการเข้า

jiw
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 147
ออฟไลน์ ออฟไลน์

กระทู้: 5,923



ดูรายละเอียด เว็บไซต์
« ตอบ #18 เมื่อ: 06 มกราคม 2010, 03:57:37 »

ยังไม่อ่านจบเช่นกัน


บวกหนึ่ง ไปก่อน


บันทึกการเข้า
Reality
สมุนแก๊งเสียว
*

พลังน้ำใจ: 51
ออฟไลน์ ออฟไลน์

กระทู้: 757



ดูรายละเอียด เว็บไซต์
« ตอบ #19 เมื่อ: 06 มกราคม 2010, 04:01:31 »

ใช้ได้กับ smf 2.0 หรือเปล่าคตรับ
น่าจะไม่ได้แน่นอนครับ

เพราะผมโมกับ SMF 1.1.11 (อัพเป็น 2 มันแก้ไขเยอะ)
บันทึกการเข้า

*You walk right into reality, While my heart's still wild and free.. 

Midnight Adventure
หน้า: [1] 2   ขึ้นบน
พิมพ์