Score:2

ใช้โคลอนสำหรับ url htaccess http://localhost/1:1

ธง cn

ฉันมีปัญหากับโคลอนที่ใช้ใน url

นี่คือ URL ของฉัน

http://localhost/1:1

นี่คือ htaccess ของฉัน

RewriteEngine เปิดอยู่
RewriteRule ^/(.*):(.*) index.php/$1:$2

ข้อผิดพลาดนี้แสดง Forbidden คุณไม่ได้รับอนุญาตให้เข้าถึง /1:1 บนเซิร์ฟเวอร์นี้

# โฮสต์เสมือน
#
<โฮสต์เสมือน *:80>
  ชื่อเซิร์ฟเวอร์ localhost
  ServerAlias ​​โลคัลโฮสต์
  DocumentRoot "${INSTALL_DIR}/www"
  <ไดเรกทอรี "${INSTALL_DIR}/www/">
    ตัวเลือก +ดัชนี +รวม +ติดตามSymLinks +หลายมุมมอง
        AllowOverride ทั้งหมด
        คำสั่งอนุญาตปฏิเสธ
        อนุญาตจากทั้งหมด
  </ไดเร็กทอรี>
</เวอร์ชวลโฮสต์>
Michael Hampton avatar
cz flag
ตรวจสอบบันทึกข้อผิดพลาดของ Apache
Score:1
ธง kz

มีปัญหาเล็กน้อยที่นี่ ...

  1. ในแต่ละไดเร็กทอรี .htaccess บริบท เส้นทาง URL ที่จับคู่โดย เขียนกฎใหม่ ลวดลาย ไม่เคยขึ้นต้นด้วยเครื่องหมายทับ ดังนั้น regex ^/(.*):(.*) จะไม่ตรงกันและคำสั่งไม่ทำอะไรเลย ดังนั้น เขียนกฎใหม่ ลวดลาย จะต้องเป็น ^(.*):(.*) - ไม่มีคำนำหน้าทับ

    • อย่างไรก็ตาม regex นี้ดีมาก ทั่วไป และน่าจะเข้าคู่กันมากเกินไป หากคุณกำลังคาดหวังคำขอของแบบฟอร์ม /1:1, เช่น. /<หมายเลข>:<หมายเลข> จากนั้นใช้ regex ที่เฉพาะเจาะจงมากขึ้น เช่น ^\d+:\d+$
  2. เนื่องจากคุณได้รับ 403 Forbidden (ตรงข้ามกับ 404 Not Found) ฉันถือว่าคุณอยู่บนเซิร์ฟเวอร์ Windows "ปัญหา" ในที่นี้ก็คือ : (ทวิภาค) ไม่ใช่อักขระที่ถูกต้องในชื่อไฟล์ Windows นี่เป็นปัญหาเกี่ยวกับ .htaccess เนื่องจากคำขอถูกแมปกับระบบไฟล์มาก่อน .htaccess (และ mod_rewrite) ได้รับการประมวลผล - เมื่อถึงจุดที่ 403 จะถูกเรียกใช้ คุณจะต้องเขียนคำขอใหม่ในการกำหนดค่าเซิร์ฟเวอร์หลัก (หรือคอนเทนเนอร์ VirtualHost) แทน ซึ่งจะเกิดขึ้น ก่อน คำขอถูกแมปกับระบบไฟล์

ดังนั้น สิ่งที่คุณกำลังพยายามทำ... เขียนคำขอใหม่ที่มีโคลอนโดยใช้ .htaccess บนเซิร์ฟเวอร์ Windows ไม่สามารถทำได้ คุณสามารถทำได้บน Linux (ที่อนุญาตทวิภาคในชื่อไฟล์) หรือในการกำหนดค่าเซิร์ฟเวอร์หลัก (เซิร์ฟเวอร์ หรือ โฮสต์เสมือน บริบท) บน Windows แต่ ไม่ได้อยู่ใน .htaccess.

เมื่อใช้ mod_rewrite ในไฟล์ เซิร์ฟเวอร์ (หรือ โฮสต์เสมือน) บริบท (ตรงข้ามกับ .htaccess) คุณ ทำ ต้องการคำนำหน้าเครื่องหมายทับ (ทั้ง ลวดลาย และ การแทน สตริง) ตัวอย่างเช่น:

# ในบริบท "เซิร์ฟเวอร์" (หรือ "โฮสต์เสมือน")
# ไม่ใช่ ".htaccess" (หรือส่วน "<Directory>" ในการกำหนดค่าเซิร์ฟเวอร์)

RewriteEngine เปิดอยู่

# เขียนใหม่ภายใน "/1:1" เป็นเส้นทางข้อมูลใน "index.php"
RewriteRule ^/\d+:\d+$ /index.php$0 [L]

เดอะ $0 การอ้างอิงย้อนกลับมีเส้นทาง URL ทั้งหมดที่บันทึกโดย เขียนกฎใหม่ ลวดลาย. ซึ่งรวมถึงคำนำหน้าเครื่องหมายทับ (เมื่อใช้ใน a เซิร์ฟเวอร์ บริบท) ซึ่งเป็นสาเหตุที่ละเว้นเครื่องหมายทับใน การแทน สตริง


อัปเดต:

ฉันทำการเปลี่ยนแปลงแล้ว โปรดดูคำถามของฉันอีกครั้งและดูว่าฉันป้อนถูกต้องหรือไม่

<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"
  <Directory "${INSTALL_DIR}/www/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride all
        Order Allow,Deny
        Allow from all
  </Directory>
</VirtualHost>

ดูเหมือนคุณไม่ได้ทำการเปลี่ยนแปลงใดๆ อย่างน้อยไม่ได้อยู่ในส่วนที่ถูกต้อง? ดังที่กล่าวไว้ข้างต้น คำสั่งเหล่านี้จำเป็นต้องเพิ่มโดยตรงไปยัง <VirtualHost> คอนเทนเนอร์ (ที่คุณโพสต์ไว้) ไม่สามารถเพิ่มลงใน .htaccess ไฟล์บนระบบปฏิบัติการ Windows - พวกเขาจะไม่ทำอะไรเลยและคุณจะได้รับการตอบกลับที่ต้องห้าม 403 ตามที่ระบุไว้

ด้านบนควรเขียนดังนี้:

<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"

  # Enable the rewrite engine in a virtualhost context
  RewriteEngine On

  # Internally rewrite "/1:1" to path-info on "index.php"
  RewriteRule ^/\d+:\d+$ /index.php$0 [L]

  <Directory "${INSTALL_DIR}/www/">
    Options -Indexes -Includes +FollowSymLinks -MultiViews
    AllowOverride all
    Require all granted
  </Directory>
</VirtualHost>

คุณจะต้องรีสตาร์ท Apache เพื่อให้การเปลี่ยนแปลงเหล่านี้มีผล (ไม่เหมือน .htaccess ไฟล์ที่แปลในขณะรันไทม์)

อย่างไรก็ตาม คุณมีแนวทางอื่นใดอีกบ้าง .htaccess และ URL อื่นๆ ของคุณถูกกำหนดเส้นทางอย่างไร คุณโพสต์คำสั่งต่อไปนี้ในความคิดเห็น:

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

ซึ่งกำหนดเส้นทาง URL ค่อนข้างแตกต่างจากที่คุณขอในคำถาม ในคำถามของคุณ คุณกำลังส่งเส้นทาง URL เป็นข้อมูลเส้นทางเพิ่มเติมไป index.php. อย่างไรก็ตาม ในคำสั่งนี้ คุณกำลังส่ง URL เป็นส่วนหนึ่งของสตริงข้อความค้นหา? สิ่งเหล่านี้เกี่ยวข้องกันอย่างไร? ทำไมพวกเขาถึงแตกต่างกัน? เห็นได้ชัดว่าคุณต้องส่ง URL ในลักษณะที่ "แอปพลิเคชัน MVC" ของคุณคาดหวัง

amir shariflou avatar
cn flag
ขอบคุณมากสำหรับการโพสต์และแสดงความคิดเห็นในคู่มือนี้สำหรับฉัน แต่วิธีนี้ใช้ไม่ได้เช่นกัน ใช่ ฉันต้องการคำสั่งนี้เพื่อใช้ใน Vamp Serverบนโฮสต์เสมือนของ Linux ถ้าเป็นไปได้ ฉันจะลองสักครั้ง พยายาม
amir shariflou avatar
cn flag
ฉันจะรับคำสั่งอะไรได้บ้างจากทวิภาคในพารามิเตอร์ คุณมีวิธีแก้ไขหรือไม่? นี่เป็นข้อผิดพลาดของฉัน (เซิร์ฟเวอร์ Apache/2.4.37 (Win64) PHP/7.0.33 ที่ localhost Port 80)
kz flag
วิธีแก้ปัญหา (วิธีแก้ปัญหา) ที่ฉันโพสต์ไว้ด้านบนควรใช้งานได้ตามที่เขียนไว้ ฉันได้ทดสอบสิ่งนี้บนเซิร์ฟเวอร์ Apache/Windows โดยใช้เครื่องหมาย `` คอนเทนเนอร์ในการกำหนดค่าเซิร์ฟเวอร์และมันทำงานตามที่ตั้งใจไว้... เพื่อส่งเส้นทาง URL (`/1:1`) เป็น PATH_INFO ไปยังสคริปต์ `/index.php` (ซึ่งดูเหมือนจะเป็นสิ่งที่คุณพยายามทำ ทำในคำถามของคุณ) (นี่ไม่ใช่วิธีเดียวในการส่งเส้นทาง URL คุณสามารถส่งเป็นสตริงข้อความค้นหาหรือไม่ส่งผ่านอะไรก็ได้ และตรวจสอบ `REQUEST_URI` แทน - แต่ขึ้นอยู่กับว่าสคริปต์ของคุณคาดหวังอะไร)
kz flag
@amirshariflou คุณใช้คำสั่งเหล่านี้ที่ไหนกันแน่? โปรดเพิ่มคำสั่งเซิร์ฟเวอร์ที่เกี่ยวข้องกับคำถามของคุณ คุณรีสตาร์ท Apache หลังจากเปลี่ยนการกำหนดค่าเซิร์ฟเวอร์หรือไม่ "ฉันจะได้คำแนะนำอะไรจากโคลอนในพารามิเตอร์" - ขออภัย ฉันไม่แน่ใจว่าคุณหมายถึงอะไร? คุณยังคงได้รับ 403 Forbidden หรือไม่? สคริปต์ของคุณ (`index.php`) คาดว่าจะอ่านเส้นทาง URL ได้อย่างไร "นี่คือข้อผิดพลาดของฉัน" - ฉันไม่เห็นข้อผิดพลาด?
kz flag
@amirshariflou ฉันได้อัปเดตคำตอบเพื่อลบเครื่องหมายทับเพิ่มเติม/ไม่จำเป็นในสตริง _substitution_ แม้ว่านี่จะเป็นเพียง "ความเป็นระเบียบเรียบร้อย" จริงๆ แต่ก็ไม่ได้สร้างความแตกต่างให้กับ "การทำงาน" หรือไม่
amir shariflou avatar
cn flag
ขอบคุณมากสำหรับเวลาของคุณ แต่ปัญหาของฉันไม่ได้รับการแก้ไข กรุณาเขียนรหัสที่แน่นอนให้ฉันเพื่อดูว่ามันคืออะไร ฉันลองหลายวิธีแล้วแต่ไม่ได้ผล แต่การถ่ายโอนแทร็บไปยังโฮสต์ Linux จะทำงานที่นั่นโดยไม่ต้องใช้โค้ด ฉันไม่รู้ว่าทำไมมันถึงรบกวน wampserver - ฉันตัดสินใจใช้ xampp อื่นด้วยซ้ำ แต่ฉันรู้ว่าต้องแก้ไขด้วยรหัสในไฟล์ htaccess
amir shariflou avatar
cn flag
ดูที่อยู่นี้ฉันต้องการทำอย่างนั้น - http://www.recitequran.com/1:1
kz flag
@amirshariflou "โปรดเขียนรหัสที่แน่นอนให้ฉัน" - รหัสในคำตอบของฉัน _is_ รหัสที่แน่นอน อย่างไรก็ตาม คุณต้องวางไว้ในตำแหน่งที่ถูกต้องในการกำหนดค่าเซิร์ฟเวอร์ของคุณ (ไม่ใช่ `.htaccess`) และรีสตาร์ทเซิร์ฟเวอร์ ขึ้นอยู่กับว่าคุณกำหนดค่าเซิร์ฟเวอร์ของคุณอย่างไร โปรดเพิ่มส่วนที่เกี่ยวข้องของการกำหนดค่าเซิร์ฟเวอร์ของคุณในคำถามของคุณ โดยมีคำสั่งเหล่านี้อยู่ในตำแหน่ง - จากนั้นฉันจะตรวจสอบและตรวจสอบได้ "ฉันไม่รู้ว่าทำไมมันถึงรบกวน wampserver" - ตามที่ระบุไว้ในคำตอบของฉัน นี่เป็นข้อจำกัดของระบบปฏิบัติการ Windows ไม่ใช่ Apache
kz flag
@amirshariflou " ฉันรู้ว่ามันต้องแก้ไขด้วยรหัสในไฟล์ htaccess" - ไม่ ตามที่ฉันระบุไว้ในคำตอบของฉัน คุณไม่สามารถใช้ `.htaccess` สำหรับสิ่งนี้ (บน Windows) คุณต้องวางคำสั่งเหล่านี้ในการกำหนดค่าเซิร์ฟเวอร์หลัก (หรือ `` คอนเทนเนอร์).
kz flag
@amirshariflou คุณมีคำสั่งอะไรอีกบ้างในไฟล์ `.htaccess` ของคุณ? URL อื่นๆ ถูกกำหนดเส้นทางอย่างไร
amir shariflou avatar
cn flag
การกำหนดเส้นทางของฉันเป็นเพราะฉันทำงานกับ mvc php และฉันทำงานตามมาตรฐาน แต่ประเด็นนี่คือสิ่งที่ควรเกิดขึ้นในไฟล์ htaccess ที่เมื่อคุณป้อนที่อยู่ เซิร์ฟเวอร์ wamp จะไม่สร้างข้อผิดพลาดและส่งคืนค่า 1 : 1 เป็นพารามิเตอร์ ลองใช้กับระบบของคุณสักครั้ง มันสำคัญมากที่ต้องทำ
amir shariflou avatar
cn flag
ข้อผิดพลาด ต้องห้าม คุณไม่ได้รับอนุญาตให้เข้าถึง /1:1 บนเซิร์ฟเวอร์นี้ เซิร์ฟเวอร์ Apache/2.4.37 (Win64) PHP/7.0.33 ที่ localhost พอร์ต 80
amir shariflou avatar
cn flag
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
kz flag
คุณมีสิทธิ์เข้าถึงการกำหนดค่าเซิร์ฟเวอร์ Apache หรือไม่ `` คอนเทนเนอร์ที่ _defines_ ไซต์ของคุณหรือไม่ โปรดแก้ไขคำถามของคุณเพื่อรวมข้อมูลนี้ "เซิร์ฟเวอร์ wamp **ไม่** ทำข้อผิดพลาด" / "ข้อผิดพลาดห้ามคุณไม่ได้รับอนุญาตให้เข้าถึง"?! คุณได้รับการตอบกลับ "ต้องห้าม" บนเซิร์ฟเวอร์ใด
amir shariflou avatar
cn flag
ฉันทำการเปลี่ยนแปลงแล้ว โปรดดูคำถามของฉันอีกครั้งและดูว่าฉันป้อนถูกต้องหรือไม่
kz flag
@amirshariflou ฉันได้อัปเดตคำตอบแล้ว อย่างไรก็ตาม เราจำเป็นต้องดูเนื้อหาของไฟล์ `.htaccess` ของคุณด้วย เนื่องจากอาจขัดแย้งกันและก่อให้เกิดปัญหาเพิ่มเติม

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา