การนำทางอย่างรวดเร็วจากหน้านี้:
หากคุณตัดสินใจที่จะเขียนสคริปต์และทำ เปลี่ยนเส้นทาง PHPข้อดีของขั้นตอนนี้ชัดเจน: PHP - ฝั่งเซิร์ฟเวอร์ เน้นภาษาสคริปต์; การเปลี่ยนเส้นทางจะดำเนินการผ่านสคริปต์บนเซิร์ฟเวอร์ ไม่ใช่ในเบราว์เซอร์ของผู้เยี่ยมชม การเปลี่ยนเส้นทางบางอย่างสามารถทำได้บนฝั่งไคลเอ็นต์ - ผ่านการเปลี่ยนเส้นทาง js (นั่นคือ ผ่านการเปลี่ยนเส้นทาง JavaScript)
นี่เป็นแนวทางที่ยืดหยุ่นและหลากหลายกว่า และคุณสามารถเปลี่ยนเส้นทางได้หลายประเภทใน PHP ซึ่งแตกต่างจากวิธีอื่นๆ นี่คือมากที่สุด ประเภททั่วไปการเปลี่ยนเส้นทางที่สามารถทำได้ใน PHP: ก) การเปลี่ยนเส้นทาง 301 PHP (สถานะการเปลี่ยนเส้นทางถาวร) b) การเปลี่ยนเส้นทาง 302 PHP (สถานะการเปลี่ยนเส้นทางชั่วคราว) c) อัปเดต
ก่อนอื่นบทความนี้จะมีประโยชน์สำหรับผู้ดูแลเว็บมือใหม่ที่กำลังมองหาวิธีนำไปใช้ การเปลี่ยนเส้นทาง URLหากไม่สามารถทำได้โดยใช้วิธีแก้ปัญหาทั่วไปอื่น ๆ เช่น Htaccess
ส่วนหัวของภาษาฟังก์ชัน PHP
ตัวอย่างเช่น สมมติว่าคุณต้องการเปลี่ยนเส้นทางไปยัง URL นี้ http://www.somewebsite.com/target.php ในต้นฉบับ หน้า PHPคุณควรเรียกสคริปต์การเปลี่ยนเส้นทางนี้:
ลองทำการทดลองง่ายๆ นี้บนโฮสติ้งในพื้นที่ของคุณ:
1) เปิด โปรแกรมแก้ไขข้อความและกรอกรหัสนี้:
บันทึกเป็น targetpage.php
2) เปิดอันว่างอันอื่น ไฟล์ข้อความและกรอกรหัสนี้:
บันทึกเป็น originatingpage.php
3) ตอนนี้เปิดเว็บเบราว์เซอร์ของคุณ ใน แถบที่อยู่เบราว์เซอร์ป้อน: http://localhost/originatingpage.php
4) คุณจะสังเกตเห็นว่าหลังจากกดปุ่ม Enter URL นี้: http://localhost/originatingpage.php เปลี่ยนเส้นทางไปที่ http://localhost/targetpage.php และไปยัง targetpage.php และคุณจะเห็นคำว่า “สวัสดี นี่คือ โคเด็กซ์” -x"
ข้อผิดพลาดที่พบบ่อยที่สุดประการหนึ่งอาจอยู่ที่การออกแบบ รหัสเอชทีเอ็มเปลี่ยนเส้นทาง:
ลองการทดลองนี้:
ไปที่สคริปต์ originatingpage.php และเพิ่มแท็ก HTML ใดๆ:
header('ตำแหน่ง: http://localhost/targetpage.php');
สมมติว่าคุณมีรหัสดังนี้:
2) บันทึกไฟล์
3) เรียกใช้สคริปต์ originating.php อีกครั้งใน. หากคุณไม่เห็นข้อผิดพลาดใดๆ คุณจะสังเกตเห็นว่ายังคงเปลี่ยนเส้นทางไปยัง targetpage.php อย่างสมบูรณ์
4) ตอนนี้ลองเปลี่ยน URL เป้าหมายให้ชี้ไปยังไซต์จริง เช่น:
5) อัปโหลด originatingpage.php ไปยังโฮสติ้งระยะไกลในไดเร็กทอรีรากของไซต์
6) รันสคริปต์ในเบราว์เซอร์โดยเรียก URL originatingpage.php เช่น: http://www.php-developer.org/originatingpage.php
7) คุณจะสังเกตเห็นว่าคราวนี้คุณจะพบข้อผิดพลาด:
คำเตือน: ไม่สามารถแก้ไขข้อมูลส่วนหัว - ส่วนหัวส่งแล้วโดย (เอาต์พุตเริ่มต้นที่ /home/phpdevel/public_html/originatingpage.php:6) ใน /home/phpdevel/public_html/originatingpage.php ออนไลน์ 7
เกิดอะไรขึ้นที่นี่? สาเหตุของปัญหาคือคุณมีเอาต์พุตโค้ด HTML ก่อนส่วนหัวของฟังก์ชันอยู่แล้ว
ประโยชน์ของการเปลี่ยนเส้นทางคืออะไร?
ด้วยการเปลี่ยนเส้นทาง คุณสามารถเปลี่ยนเส้นทางผู้ใช้จากหน้าเว็บหนึ่งไปยังอีกหน้าเว็บหนึ่งได้ นอกจากนี้ หากในเว็บไซต์ของคุณ ข้อความลิงก์ไปยังบทความอยู่ในรูปแบบที่ไม่น่าดู (ชุดตัวเลขหรือสัญลักษณ์) ก็สามารถเปลี่ยนแปลงได้โดยใช้การทับศัพท์และเปลี่ยนเส้นทางไปยังลิงก์เหล่านี้ ความเป็นไปได้ในการเปลี่ยนเส้นทางนั้นแทบไม่มีขีดจำกัด! ประโยชน์ของวิธีนี้ในการเพิ่มการจัดทำดัชนีหน้า ปรับปรุงประสิทธิภาพของไซต์ และดึงดูดผู้ใช้นั้นชัดเจน
( PHP 4, PHP 5, PHP 7)
ส่วนหัว — ส่งส่วนหัว HTTP แบบดิบ
คำอธิบาย
ส่วนหัว (สตริง $header [, บูล $แทนที่ = จริง [, int $http_response_code ]]) : เป็นโมฆะ
ส่วนหัว()ใช้เพื่อส่งส่วนหัว HTTP แบบดิบ ดูข้อกำหนด » HTTP/1.1 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับส่วนหัว HTTP
จำไว้นะ ส่วนหัว()จะต้องถูกเรียกก่อนที่จะส่งเอาต์พุตจริงใด ๆ ไม่ว่าจะโดยแท็ก HTML ปกติ บรรทัดว่างในไฟล์ หรือจาก PHP เป็นข้อผิดพลาดทั่วไปในการอ่านโค้ด รวม, หรือ จำเป็นต้อง, ฟังก์ชัน หรือฟังก์ชันการเข้าถึงไฟล์อื่น และมีช่องว่างหรือบรรทัดว่างที่เอาต์พุตไว้ก่อนหน้า ส่วนหัว()เรียกว่า
ปัญหาเดียวกันนี้เกิดขึ้นเมื่อใช้ไฟล์ PHP/HTML ไฟล์เดียว
/* นี่จะทำให้เกิดข้อผิดพลาด สังเกตผลลัพธ์
* ด้านบน ซึ่งอยู่ก่อนการเรียก header() */
ส่วนหัว();
?>
ออก;
พารามิเตอร์
สตริงส่วนหัว มีการเรียกส่วนหัวกรณีพิเศษสองรายการ อันแรกคือส่วนหัวที่ขึ้นต้นด้วยสตริง " HTTP/ " (ตัวพิมพ์เล็กและใหญ่) ซึ่งจะใช้ในการระบุรหัสสถานะ HTTP ที่จะส่ง ตัวอย่างเช่น หากคุณได้กำหนดค่า Apache ให้ใช้สคริปต์ PHP เพื่อจัดการคำขอสำหรับไฟล์ที่หายไป (โดยใช้ ErrorDocument
คำสั่ง) คุณอาจต้องการตรวจสอบให้แน่ใจว่าสคริปต์ของคุณสร้างรหัสสถานะที่ถูกต้อง
?>
ส่วนหัว ("ไม่พบ HTTP/1.0 404"); กรณีพิเศษที่สองคือส่วนหัว "ตำแหน่ง:" ไม่เพียงแต่จะส่งส่วนหัวนี้กลับไปยังเบราว์เซอร์เท่านั้น แต่ยังส่งคืน aเปลี่ยนเส้นทาง 201 (302) รหัสสถานะไปยังเบราว์เซอร์เว้นแต่ว่า หรือกรหัสสถานะได้ถูกตั้งไว้แล้ว
ส่วนหัว( "ตำแหน่ง: http://www.example.com/"- /* เปลี่ยนเส้นทางเบราว์เซอร์ */
/* ตรวจสอบให้แน่ใจว่าโค้ดด้านล่างไม่ถูกดำเนินการเมื่อเราเปลี่ยนเส้นทาง -
ส่วนหัว();
?>
แทนที่
พารามิเตอร์การแทนที่ที่เป็นทางเลือกจะระบุว่าส่วนหัวควรแทนที่ส่วนหัวที่คล้ายกันก่อนหน้านี้ หรือเพิ่มส่วนหัวที่สองที่เป็นประเภทเดียวกัน โดยค่าเริ่มต้นก็จะเข้ามาแทนที่ แต่ถ้าคุณผ่านเข้ามา เท็จเป็นอาร์กิวเมนต์ที่สอง คุณสามารถบังคับหลายส่วนหัวที่เป็นประเภทเดียวกันได้ ตัวอย่างเช่น:
ส่วนหัว ("WWW-Authenticate: Negotiate");
ส่วนหัว ("WWW-Authenticate: NTLM" , false );
?>
Http_response_code
บังคับให้โค้ดตอบกลับ HTTP เป็นค่าที่ระบุ โปรดทราบว่าพารามิเตอร์นี้จะมีผลหากส่วนหัวไม่ว่างเปล่าเท่านั้น
ส่งกลับค่า
ไม่มีการส่งกลับค่า
บันทึกการเปลี่ยนแปลง
เวอร์ชัน | คำอธิบาย |
---|---|
5.1.2 | ฟังก์ชันนี้ป้องกันไม่ให้ส่งส่วนหัวมากกว่าหนึ่งรายการพร้อมกันเพื่อป้องกันการโจมตีแบบแทรกส่วนหัว |
ตัวอย่าง
ตัวอย่าง #1 ดาวน์โหลดกล่องโต้ตอบ
หากคุณต้องการให้ผู้ใช้ได้รับแจ้งให้บันทึกข้อมูลที่คุณกำลังส่ง เช่น ไฟล์ PDF ที่สร้างขึ้น คุณสามารถใช้ส่วนหัว » Content-Disposition เพื่อระบุชื่อไฟล์ที่แนะนำ และบังคับให้เบราว์เซอร์แสดงกล่องโต้ตอบบันทึก
// เราจะส่งออกเป็น PDF
ส่วนหัว( "ประเภทเนื้อหา: application/pdf");
// มันจะเรียกว่า download.pdf
ส่วนหัว( "การจัดการเนื้อหา: ไฟล์แนบ; filename="downloaded.pdf"");
// แหล่งที่มาของ PDF อยู่ในไฟล์ original.pdf
readfile("ต้นฉบับ.pdf");
?>
ตัวอย่าง #2 คำสั่งแคช
สคริปต์ PHP มักจะสร้างเนื้อหาแบบไดนามิกที่ต้องไม่ถูกแคชโดยเบราว์เซอร์ไคลเอนต์หรือแคชพร็อกซีใด ๆ ระหว่างเซิร์ฟเวอร์และเบราว์เซอร์ไคลเอนต์ พร็อกซีและไคลเอนต์จำนวนมากสามารถบังคับให้ปิดการใช้งานการแคชด้วย:
ส่วนหัว( "การควบคุมแคช: ไม่มีแคช ต้องตรวจสอบใหม่"- //HTTP/1.1
ส่วนหัว( "หมดอายุ: วันเสาร์ที่ 26 กรกฎาคม 1997 05:00:00 GMT"- //วันที่ในอดีต
?>
คุณอาจพบว่าหน้าเว็บของคุณไม่ได้ถูกแคชไว้ แม้ว่าคุณจะไม่ได้แสดงส่วนหัวด้านบนทั้งหมดก็ตาม มีตัวเลือกมากมายที่ผู้ใช้สามารถตั้งค่าสำหรับเบราว์เซอร์ของตนซึ่งเปลี่ยนพฤติกรรมการแคชเริ่มต้น เมื่อส่งส่วนหัวข้างต้น คุณควรแทนที่การตั้งค่าใดๆ ที่อาจทำให้เอาต์พุตของสคริปต์ของคุณถูกแคช
"ข้อกำหนด HTTP 1.1 เวอร์ชันล้าสมัย (IETF RFC 2616) จำเป็นต้องมี URI สัมบูรณ์ที่สมบูรณ์สำหรับการเปลี่ยนเส้นทาง คณะทำงาน IETF HTTP พบว่าเว็บเบราว์เซอร์ที่ได้รับความนิยมสูงสุดสามารถทนต่อการส่งผ่าน URL แบบสัมพันธ์ได้ และด้วยเหตุนี้ข้อกำหนดเฉพาะของ HTTP 1.1 ที่อัปเดต (IETF RFC 7231) จึงผ่อนคลายข้อจำกัดเดิม ทำให้สามารถใช้ URL แบบสัมพันธ์ในส่วนหัวของ Location ได้"
วิธีแก้ปัญหา: อย่าส่งส่วนหัวเหล่านั้น
นอกจากนี้ โปรดทราบว่า IE เวอร์ชัน 5, 6, 7 และ 8 บีบอัดไฟล์ที่บีบอัดแล้วสองครั้ง และไม่ได้ย้อนกลับกระบวนการอย่างถูกต้อง ดังนั้นไฟล์ ZIP และไฟล์ที่คล้ายกันจึงเสียหายขณะดาวน์โหลด
วิธีแก้ปัญหา: ปิดใช้งานการบีบอัด (นอกเหนือจากข้อความ/html) สำหรับ IE เวอร์ชันเฉพาะเหล่านี้ เช่น การใช้คำสั่ง "BrowserMatch" ของ Apache ตัวอย่างต่อไปนี้ปิดใช้งานการบีบอัดใน IE ทุกเวอร์ชัน:
BrowserMatch ".*MSIE.*" gzip-only-text/html
4. ไม่อนุญาตให้ใช้ URI แบบสัมพัทธ์
ผิด: ตำแหน่ง: /something.php?a=1
ผิด: ตำแหน่ง: ?a=1มันจะทำให้พร็อกซีเซิร์ฟเวอร์และไคลเอนต์ http มีความสุขมากขึ้น
15 ปีที่แล้ว
หากคุณไม่ได้ใช้ HTTP Response 204 จะสะดวกมาก 204 บอกให้เซิร์ฟเวอร์ยุติคำขอนี้ทันที ซึ่งจะมีประโยชน์หากคุณต้องการให้ฟังก์ชันฝั่งไคลเอ็นต์ javascript (หรือคล้ายกัน) ดำเนินการฟังก์ชันฝั่งเซิร์ฟเวอร์โดยไม่ต้องรีเฟรช หรือเปลี่ยนหน้าเว็บปัจจุบัน เหมาะสำหรับการอัพเดตฐานข้อมูล การตั้งค่าตัวแปรโกลบอล ฯลฯ
ส่วนหัว("สถานะ: 204"); (หรืออีกสายหนึ่ง)
ส่วนหัว ("HTTP/1.0 204 ไม่มีการตอบกลับ");15 ปีที่แล้ว
การเรียกไปยัง session_write_close() ก่อนคำสั่ง
header("ตำแหน่ง: URL");
ออก();
?>
ขอแนะนำหากคุณต้องการให้แน่ใจว่าเซสชันได้รับการอัปเดตก่อนที่จะดำเนินการเปลี่ยนเส้นทางเราพบสถานการณ์ที่สคริปต์ที่เข้าถึงโดยการเปลี่ยนเส้นทางไม่สามารถโหลดเซสชันได้อย่างถูกต้อง เนื่องจากสคริปต์แบบอย่างไม่มีเวลาในการอัปเดต (เราใช้ตัวจัดการฐานข้อมูล)
9 เดือนที่แล้ว
// ระวังว่าการเพิ่มช่องว่างระหว่างคีย์เวิร์ด "Location" และเครื่องหมายทวิภาคทำให้เกิดข้อผิดพลาดเซิร์ฟเวอร์ภายใน
//บรรทัดนี้ทำให้เกิดข้อผิดพลาด
7
ส่วนหัว ("ตำแหน่ง: index.php&controller=produit&action=index");// ในขณะที่มันจะต้องเขียนโดยไม่มีช่องว่าง
ส่วนหัว ("ตำแหน่ง: index.php&controller=produit&action=index");1 ปีที่ผ่านมา
การเรียกส่วนหัวอาจทำให้ผู้ใช้ php มือใหม่เข้าใจผิดได้
เมื่อมีการระบุ "การเรียกส่วนหัว" จะหมายถึงตำแหน่งบนซ้ายสุดของไฟล์ ไม่ใช่ฟังก์ชัน "header()"
"10 ปีที่แล้ว
นี่คือสคริปต์ PHP ที่ฉันเขียนเพื่อสตรีมไฟล์และเข้ารหัสด้วยการดำเนินการ xor ในไบต์และด้วยคีย์:
การเข้ารหัสใช้งานได้ดีมาก แต่ความเร็วลดลง 2 ตอนนี้อยู่ที่ 520KiB/s ตอนนี้ผู้ใช้จะถูกถามถึงรหัสผ่าน md5 (แทนที่จะเก็บไว้ในรหัสโดยตรง) มีภาษาฝรั่งเศสบางส่วนเพราะเป็นภาษาแม่ของฉันจึงปรับเปลี่ยนตามที่คุณต้องการ
// สตรีมไฟล์และเข้ารหัสข้อมูลได้ทันที
//การตั้งค่า
// -- ไฟล์ที่จะสตรีม
$file = "FILE_out" ;
// -- บัฟเฟอร์การอ่าน
$ความยาวบัฟเฟอร์ = 3840 ;
// -- พิมพ์เลขฐานสิบหก
//$คีย์ชาร์ = "9cdfb439c7876e703e307864c9167a15";// ฟังก์ชั่น: แปลงคีย์ hex ในสตริงให้เป็นไบนารี่
ฟังก์ชั่น hex2bin ($h ) (
ถ้า (! is_string ($h )) กลับ null ;
$r = อาร์เรย์();
สำหรับ ($a = 0 ; ($a * 2 )< strlen ($h ); $a ++) {
$ta = ฐานสิบหก ($h [ 2 * $a ]);
$tb = เลขฐานสิบหก ($h [(2 * $a + 1 )]);
$r [ $a ] = (int) (($ta<< 4 ) + $tb );
}
กลับ $r ;
}// ฟังก์ชั่นส่งส่วนหัวการตรวจสอบสิทธิ์
ฟังก์ชั่น AskPassword ($text = "ป้อนรหัสผ่าน" ) (
ส่วนหัว( "WWW-รับรองความถูกต้อง: ขอบเขตพื้นฐาน = ""- utf8_decode($ข้อความ) -
header("HTTP/1.0 401 ไม่ได้รับอนุญาต");
กลับ 1 ;
}// คีย์ถูกถามเมื่อเริ่มครั้งแรก
ถ้า (!isset($_SERVER [ "PHP_AUTH_PW" ])) (
ถามรหัสผ่าน();
เสียงสะท้อน “Une clé est necessaire!
" ;
ออก;
}
// รับกุญแจเป็นเลขฐานสิบหก
$คีย์ชาร์ = $_SERVER [ "PHP_AUTH_PW" ];// แปลงคีย์และกำหนดขนาดของคีย์
$key = hex2bin ($คีย์ชาร์ );
$keylength = จำนวน($key);
// Teste si la clé est valide en hex
ถ้า ($key == "" || $keylength<= 4 ) {
AskPassword("Clé ไม่ถูกต้อง!");
//echo "เคล ไม่ถูกต้อง!
";
ออก();
}
// Teste si la clé est de longueur d"une puissance de 2
ถ้า (($ความยาวคีย์ % 2 ) != 0 ) (
ถามรหัสผ่าน ( "Clé de longueur ไม่ถูกต้อง (หลาย 2 ที่ไม่ซ้ำกัน)");
//echo "Clé de longueur ไม่ถูกต้อง (ไม่ซ้ำกัน 2)
";
ออก();
}//ส่วนหัว
ส่วนหัว( "ประเภทเนื้อหา: application/octet-stream; ");
ส่วนหัว( "เนื้อหา-การถ่ายโอน-การเข้ารหัส: ไบนารี่");
header("ความยาวเนื้อหา: " .file($file) . "; " );
ส่วนหัว("ชื่อไฟล์=\"" . $file . "\"; " );
ล้าง(); //นี่ไม่สำคัญเลย// เปิดไฟล์แบบอ่านอย่างเดียว
$fp = fopen($file, "r");
ในขณะที่ (! feof ($fp ))
{
// อ่านขนาดบัฟเฟอร์ของไฟล์
$buffer = fread ($fp, $bufferlength);
$เจ = 0 ;
สำหรับ ($i = 0; $i< $bufferlength ; $i ++) {
// คีย์ถูกอ่านแบบวนซ้ำเพื่อเข้ารหัสไฟล์ทั้งหมด
ถ้า ($i % $keylength == 0 ) (
$เจ = 0 ;
}
// ใช้การดำเนินการ xor ระหว่างคีย์และไฟล์เพื่อฝังศพใต้ถุนโบสถ์
// การดำเนินการนี้กินเวลา CPU มาก (สตรีมที่ 1MiB/s บนเซิร์ฟเวอร์ของฉัน; Intel E2180)
$tmp = pack("C", $key[$j]);
$bufferE = ($บัฟเฟอร์ [ $i ]^ $tmp ); -<==== Le fameux XOR/*
เสียงสะท้อน "
คีย์[".$j."]: ";
var_dump($tmp);
เสียงสะท้อน "
บัฟเฟอร์[".$i"]: ";
var_dump($บัฟเฟอร์[$i]);
เสียงสะท้อน "
บัฟเฟอร์E: ";
var_dump($bufferE);
เสียงสะท้อน "
";
//*/// ส่งข้อมูลที่เข้ารหัส
12:06 น. - จะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าอื่นได้อย่างไร?
เสียงสะท้อน $bufferE ;
// ทำความสะอาดหน่วยความจำ
$bufferE = "" ;
$เจ++;
}
$บัฟเฟอร์ = "" ;
ล้าง(); // สิ่งนี้จำเป็นสำหรับการดาวน์โหลดจำนวนมาก
/*
fclose($fp);
ออก();
//*/
}
//ปิดไฟล์ก็เป็นอันเสร็จสิ้น
fclose($fp);มีวิธีแก้ไขหลายประการ:
1) จาวาสคริปต์
2) HTML
3) php.ini
4) .htaccess
1) นี่คือตัวอย่างโค้ดในจาวาสคริปต์:ประเภท = "ข้อความ/จาวาสคริปต์">
สิ่งที่คุณต้องทำคือสร้างไฟล์ index.htm (หรือ index.html หรือ index.php - หนึ่งในนั้น! นี่เป็นสิ่งสำคัญ) และใส่โค้ดลงไป หลังจากแทนที่ http://www.mysite.com/ ด้วย ที่อยู่เว็บไซต์ของคุณ
คุณสามารถระบุเส้นทางไปยังโฟลเดอร์หรือโดยตรงไปยังไฟล์ได้ เช่น http://www.mysite.com/cat/file.phpเบราว์เซอร์ของผู้ใช้จะถูกเปลี่ยนเส้นทางทันที* ไปยังหน้าที่คุณระบุ
*หากเบราว์เซอร์รองรับการเปลี่ยนเส้นทาง ขณะนี้เบราว์เซอร์เกือบทั้งหมดรองรับการเปลี่ยนเส้นทาง เว้นแต่ผู้ใช้จะกำหนดค่าเบราว์เซอร์อย่างชาญฉลาด =)หากต้องการแสดงข้อความให้ผู้ใช้เห็นก่อนเปลี่ยนเส้นทาง ให้ใช้สคริปต์เวอร์ชันอื่น:
ประเภท = "ข้อความ / จาวาสคริปต์">
ตอนนี้คุณจะถูกย้าย!
%หากเบราว์เซอร์ของคุณไม่รองรับการเปลี่ยนเส้นทาง คลิกที่นี่: %ที่นี่
http://somesite2.com/ -- แทนที่ด้วยที่อยู่เว็บไซต์ของคุณ
2) หากต้องการเปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้โดยใช้ HTML ให้ใช้แท็ก META:
http://www.blahblahblahsite.com/ -- แทนที่ด้วยที่อยู่เว็บไซต์ของคุณ
10 - หมายถึงเบราว์เซอร์จะถูกเปลี่ยนเส้นทางหลังจากผ่านไป 10 วินาที
ตั้งค่าเป็น 0 เพื่อเปลี่ยนเส้นทางทันที
หากคุณตั้งค่าการหมดเวลา คุณสามารถฝากข้อความถึงผู้ใช้ในไฟล์ได้ เช่น:
ภายใน 10 วินาที คุณจะถูกขนส่ง!
หากเบราว์เซอร์ของคุณไม่รองรับการเปลี่ยนเส้นทาง คลิกที่นี่: %ที่นี่
3) การเปลี่ยนเส้นทางทันทีโดยใช้ PHP:
http://myownsite.com/folder/ -- แทนที่ด้วยที่อยู่เว็บไซต์หรือหน้าของคุณ
ควรวางโค้ดในไฟล์ที่มีนามสกุล .php เช่น index.php4) การเปลี่ยนเส้นทางทันทีโดยใช้ .htaccess:
เช่นเดียวกับโปรแกรมอื่นๆ เว็บเซิร์ฟเวอร์มีการตั้งค่าบางอย่าง แต่คุณในฐานะผู้ใช้ Apache อาจไม่มีสิทธิ์ในการเปลี่ยนแปลงการกำหนดค่า Apache ผ่านไฟล์หลัก ซึ่งผลกระทบนี้จะมีผลกับผู้ใช้ทั้งหมดของเซิร์ฟเวอร์นี้ แต่คุณสามารถเปลี่ยนไฟล์การกำหนดค่าบางไฟล์ได้ ซึ่งจะใช้กับเว็บไซต์ของคุณเท่านั้น หนึ่งในไฟล์เหล่านี้คือ .htaccess
นี่เป็นไฟล์การกำหนดค่าที่ยืดหยุ่นสำหรับเว็บเซิร์ฟเวอร์ Apache "ยืดหยุ่น" หมายความว่าทันทีที่คุณเปลี่ยนแปลงบางสิ่งในไฟล์นี้ การเปลี่ยนแปลงจะมีผลทันที ที่จริงแล้ว วัตถุประสงค์ของไฟล์ .htaccess คือการจัดหาวิธีในการกำหนดค่า Apache สำหรับผู้ใช้ที่ไม่สามารถเปลี่ยนไฟล์การกำหนดค่าหลัก httpd.conf (ไฟล์นี้เป็นไฟล์การกำหนดค่าหลักของเซิร์ฟเวอร์ Apache และการดำเนินการของไฟล์จะมีผลกับผู้ใช้ทั้งหมดของ สำเนาของ Apache ที่กำหนด)
ผู้ใช้เว็บไม่สามารถเข้าถึงไฟล์นี้จากเบราว์เซอร์ หากไฟล์ .htaccess อยู่ในไดเร็กทอรีรากของเซิร์ฟเวอร์ การดำเนินการของไฟล์นั้นจะมีผลกับทั้งเซิร์ฟเวอร์ ยกเว้นโฟลเดอร์ที่มีไฟล์ .htaccess อื่นอยู่ (และยกเว้นโฟลเดอร์ทั้งหมด "ด้านล่าง" โฟลเดอร์นี้ที่มีไฟล์ .htaccess ที่สอง htaccess)
การกำหนดค่าไฟล์ .htaccess สามารถช่วยคุณได้ในหลายสถานการณ์ แต่ข้อผิดพลาดทางไวยากรณ์เพียงเล็กน้อย (เช่น การเว้นวรรคที่จำเป็น) ก็อาจทำให้เนื้อหาของไซต์ของคุณแสดงไม่ถูกต้องหรือไม่แสดงเลย เนื่องจาก .htaccess เป็นไฟล์ระบบที่ซ่อนอยู่ โปรดตรวจสอบให้แน่ใจว่าไคลเอนต์ FTP ของคุณได้รับการกำหนดค่าให้แสดงไฟล์ที่ซ่อนอยู่
สร้างไฟล์ข้อความเปล่าโดยใช้โปรแกรมแก้ไขข้อความ เช่น Notepad และบันทึกเป็น htaccess.txt เหตุผลที่คุณต้องบันทึกไฟล์เป็น htaccess.txt ก็เนื่องมาจากระบบปฏิบัติการและแอปพลิเคชัน FTP จำนวนมากไม่สามารถอ่านไฟล์ .htaccess ตามค่าเริ่มต้นได้ หลังจากอัปโหลดไปยังเซิร์ฟเวอร์ คุณสามารถเปลี่ยนชื่อไฟล์เป็น .htaccess ได้
เปลี่ยนเส้นทางทั้งไซต์ไปยังโดเมนอื่น (เช่น example.net ถูกเปลี่ยนเส้นทางไปยัง example.com)
ใครๆก็ส่งได้.. แต่การเปลี่ยนเส้นทางอย่างถูกต้องถือเป็นศิลปะทั้งหมด แต่การเปลี่ยนเส้นทางผู้ใช้ไปยังเส้นทางที่ถูกต้องบนอินเทอร์เน็ตนั้นยากยิ่งกว่า การเปลี่ยนเส้นทางไปยัง php เหมาะที่สุดสำหรับสิ่งนี้
การเปลี่ยนเส้นทางประเภทใด?
ในการเขียนโปรแกรมเว็บ สถานการณ์เกิดขึ้นเมื่อคุณต้องการเปลี่ยนเส้นทางผู้ใช้ตามลิงก์ไปยังที่อยู่อื่น แน่นอนว่าเมื่อมองแวบแรก การใช้การเปลี่ยนเส้นทางดังกล่าวอาจดู “ผิดกฎหมาย” เล็กน้อย ในทางปฏิบัติ การเปลี่ยนเส้นทางดังกล่าวเป็นที่ต้องการไม่เพียงแต่ในหมู่ผู้โจมตีเท่านั้น แต่ยังเป็นที่ต้องการของผู้ดูแลเว็บที่ซื่อสัตย์ด้วย:
ในกรณีใดบ้างที่อาจจำเป็นต้องมีการเปลี่ยนเส้นทาง:
- เมื่อกลไกของไซต์ถูกแทนที่ สถาปัตยกรรมของทรัพยากรทั้งหมดจะเปลี่ยนแปลงตามไปด้วย ปัญหาก็เกิดขึ้นจากการเปลี่ยนเส้นทาง
- เมื่อโครงสร้างของทรัพยากรถูกวาดใหม่ ทั้งส่วนหรือวัสดุหนึ่งรายการจะถูกเพิ่ม ลบ หรือถ่ายโอน ขณะที่กระบวนการนี้เกิดขึ้น คุณสามารถเปลี่ยนเส้นทางผู้ใช้ไปยังส่วนที่ต้องการได้ชั่วคราว
- หากเว็บไซต์เพิ่งเปลี่ยนชื่อโดเมน หลังจากเปลี่ยนชื่อโดเมน ชื่อโดเมนเก่าจะยังคงปรากฏในผลการค้นหาเป็นระยะเวลาหนึ่ง ในกรณีนี้ เครื่องมือค้นหาจะเปลี่ยนเส้นทางผู้ใช้ไปยังโดเมนใหม่โดยอัตโนมัติ
- ในระหว่างขั้นตอนการอนุญาตตามกฎแล้วจะมีผู้ใช้สองกลุ่มบนเว็บไซต์ขนาดใหญ่: ผู้เยี่ยมชมทั่วไปและผู้ดูแลระบบทรัพยากร ในกรณีนี้ ควรใช้การเปลี่ยนเส้นทางสำหรับผู้ใช้แต่ละรายตามสิทธิ์และบทบาทของเขา หลังจากการอนุญาต ผู้ดูแลไซต์หรือผู้ดูแลไปที่ส่วนผู้ดูแลระบบของทรัพยากร และผู้เยี่ยมชมไปที่ส่วนผู้ใช้ของทรัพยากร
คุณสมบัติของการเปลี่ยนเส้นทางไปยัง php.ini
ไม่เหมือนกับภาษาอื่นๆ PHP มีข้อดีบางประการในการใช้การเปลี่ยนเส้นทาง:
- Php เป็นภาษาโปรแกรมฝั่งเซิร์ฟเวอร์ ดังนั้นการเปลี่ยนเส้นทางจะไม่เกิดขึ้นในโค้ด html ของเพจที่แสดงในเบราว์เซอร์ แต่ในสคริปต์ที่อยู่บนเซิร์ฟเวอร์
- การเปลี่ยนเส้นทางเป็น php สามารถทำได้หลายวิธี ซึ่งขยายการใช้งานได้อย่างมาก
- เนื่องจากการประมวลผลข้อมูลบนเซิร์ฟเวอร์ การเปลี่ยนเส้นทางที่ดำเนินการโดยใช้ PHP จึงมีความไวต่อผลกระทบของตัวกรองเครื่องมือค้นหาน้อยกว่า
หากต้องการเปลี่ยนเส้นทางใน PHP จะใช้ฟังก์ชัน header() ใช้สำหรับส่งส่วนหัว http ไวยากรณ์ของมันคือ:
ส่วนหัวเป็นโมฆะ (สตริง $string [, bool $replace = true [, int $http_response_code ]])
อาร์กิวเมนต์ที่ยอมรับโดยฟังก์ชัน:
- สตริง $สตริง– บรรทัดส่วนหัว;
อาร์กิวเมนต์นี้มีสองประเภท อันแรกใช้สำหรับส่งรหัสสถานะการเชื่อมต่อ ขึ้นต้นด้วย "HTTP/" อีกประเภทหนึ่งจะส่งรหัสสถานะ (REDIRECT 302) ไปยังเบราว์เซอร์ไคลเอ็นต์พร้อมกับส่วนหัว อาร์กิวเมนต์นี้เริ่มต้นด้วย "ตำแหน่ง:"
- bool $replace เป็นแอ็ตทริบิวต์ทางเลือกประเภท bool รับผิดชอบในการเอาชนะส่วนหัวก่อนหน้า หากตั้งค่าเป็น true ส่วนหัวก่อนหน้าหรือส่วนหัวที่เป็นประเภทเดียวกันจะถูกแทนที่ หากอาร์กิวเมนต์ถูกตั้งค่าเป็น false ส่วนหัวจะไม่ถูกเขียนใหม่ ตามค่าเริ่มต้น ค่านี้จะถูกตั้งค่าเป็น true ;
- http_response_code - อาร์กิวเมนต์บังคับให้ใช้รหัสตอบกลับ HTTP การติดตั้งโค้ดจะสำเร็จหากอาร์กิวเมนต์สตริงไม่ว่างเปล่า
รหัสสถานะ HTTP เป็นส่วนหนึ่งของบรรทัดบนสุดของการตอบกลับของเซิร์ฟเวอร์ รหัสประกอบด้วยตัวเลขสามตัว ตามด้วยข้อความอธิบายเป็นภาษาอังกฤษ ตัวเลขตัวแรกรับผิดชอบคลาสสถานะ การเปลี่ยนเส้นทางสอดคล้องกับรหัสตั้งแต่ 300 ถึง 307 คำอธิบายแบบเต็มสามารถพบได้ในเอกสารทางเทคนิคที่เกี่ยวข้อง
เมื่อใช้ฟังก์ชัน header() เพื่อเปลี่ยนเส้นทางลิงก์ภายนอก ตำแหน่งของการโทรนั้นมีความสำคัญอย่างยิ่ง ในโค้ดควรอยู่เหนือแท็ก html ทั้งหมด:
การใช้การเปลี่ยนเส้นทาง header()
เพื่อสาธิตการทำงานของฟังก์ชันบนเซิร์ฟเวอร์ภายในเครื่อง คุณต้องสร้างไฟล์สองไฟล์ ลองเรียกหนึ่งในนั้นว่า เปลี่ยนเส้นทาง.php และอีกอัน เปลี่ยนเส้นทาง2.php ภายในอันแรกเราจะทำการเรียกใช้ฟังก์ชันในรูปแบบต่อไปนี้:
ในไฟล์อื่นเราใส่บรรทัด:
echo "สวัสดี! คุณอยู่ในไฟล์ เปลี่ยนเส้นทาง2.php";
ตัวอย่างที่เป็นประโยชน์เพิ่มเติมของการใช้การเปลี่ยนเส้นทางไปยัง php:
- บังคับให้ส่งรหัสสถานะ http - เมื่อใช้อาร์กิวเมนต์แรกของฟังก์ชัน header() ประเภท " ที่ตั้ง"ตามค่าเริ่มต้น รหัสสถานะจะถูกส่งไปยังส่วนหัว" 302 » ( ย้ายชั่วคราว- นี่อาจกลายเป็นปัญหาได้เมื่อย้ายทรัพยากรไปยังชื่อโดเมนอื่น ในเครื่องมือค้นหา การเปลี่ยนเส้นทางชั่วคราวดังกล่าวอาจใช้เวลานานกว่านั้น ท้ายที่สุดแล้วเครื่องมือค้นหาจะวิเคราะห์รหัสสถานะอย่างต่อเนื่อง และมันบอกว่า “ ย้ายชั่วคราว- ตัวอย่างการบังคับเขียนรหัสสถานะใหม่ " 302 " ถึง " 301 » ( ย้ายอย่างถาวร):
การเขียนใหม่ยังสามารถทำได้ในสองขั้นตอน บรรทัดแรกเขียนรหัสสถานะใหม่ และบรรทัดที่สองเปลี่ยนเส้นทางไปยังที่อยู่ใหม่:
- การใช้การเปลี่ยนเส้นทางของลิงก์ภายนอกเพื่อเปลี่ยนเส้นทางขึ้นอยู่กับบทบาทของผู้ใช้ บทบาทจะถูกกำหนดในระหว่างขั้นตอนการรับรองความถูกต้อง ค่าที่จะประมวลผลจะถูกเขียนไปยังตัวแปร $who:
- ตัวอย่างเชิงปฏิบัติแบบง่ายของการใช้การเปลี่ยนเส้นทางลิงก์ภายนอก - การคลิกลิงก์จะนำไปสู่หน้า PHP จากที่นี่ ผู้ใช้จะถูกโอนไปยัง Rambler ภายใน 5 วินาที รหัส HTML:
กดฉันสิ
รหัสไฟล์ Redirect3.php:
ตอนนี้เรามาถึงการเรียนรู้พื้นฐานของการเปลี่ยนเส้นทางใน PHP ตอนนี้คุณสามารถทำหน้าที่เปลี่ยนเส้นทางผู้ใช้ไปในทิศทางที่ถูกต้องได้อย่างปลอดภัย สิ่งสำคัญคืออย่าทำผิดพลาดในทิศทางมิฉะนั้นคุณจะนำผู้ใช้ทั้งหมดของคุณไปยังไซต์ของคนอื่น...