Score:1

.htaccess ลบพารามิเตอร์ php url ตัวแรกหากมีอยู่ตัวที่สอง

ธง cn

นี่คือรหัส .htaccess ของฉัน:

RewriteCond %{REQUEST_URI} !^/pages/ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(/([^/]+))? หน้า.php?PAGE=$1&LINK=$3 [L]

* โดยที่ $1 = โปรไฟล์ และ $3 = john-smith

นี่เป็นการเขียนใหม่ที่ดีเช่น https://example.com/profile/john-smith แต่ฉันต้องการกฎการเขียนซ้ำครั้งที่สองเช่น https://example.com/john-smith เฉพาะในกรณีที่มีพารามิเตอร์ที่สองที่มี john-smith อยู่

ขอขอบคุณ!

อัปเดต: (กฎที่สมบูรณ์ของไฟล์ .htaccess ของฉัน)

#ป้องกันไฟล์ที่ขึ้นต้นด้วย .
กฎการเขียนซ้ำ /\.(.*) - [NC,F]

# เปลี่ยนเส้นทาง HTTPS
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

# ไม่มีการเข้าถึงรูทโดยไม่มีดัชนี * และการรักษาความปลอดภัยอื่น ๆ
RewriteEngine เปิดอยู่
ตัวเลือกทั้งหมด -ดัชนี
ฐานการเขียนซ้ำ /
DirectoryIndex index.php index.html index.htm
เอกสารข้อผิดพลาด 404 https://example.com/pages.php?PAGE=404

# ป้องกันการอัพโหลดไฟล์ PHP ที่เป็นอันตราย
<FilesMatch â\.(php|php\.)$â> 
คำสั่งอนุญาตปฏิเสธ 
ปฏิเสธจากทั้งหมด 
</FilesMatch>

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [QSA,L]

RewriteCond %{REQUEST_URI} !^/pages/ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(/([^/]+))? หน้า.php?PAGE=$1&LINK=$3 [QSA, L]
kz flag
คุณช่วยอธิบายเป็นภาษาธรรมชาติให้ตรงประเด็นได้ไหมว่าคุณกำลังพยายามทำอะไร เช่น. URL ที่ขอและ URL เป้าหมายที่คาดไว้ ไม่มี "พารามิเตอร์ URL" ใน URL ตัวอย่างสองรายการที่คุณระบุไว้ ("พารามิเตอร์ URL" จะแสดงเฉพาะใน URL ที่เขียนใหม่) "ฉันต้องการกฎการเขียนซ้ำครั้งที่สองเช่น `https://example.com/john-smith` ก็ต่อเมื่อมีพารามิเตอร์ที่สองที่มี john-smith อยู่" - ไม่มี "พารามิเตอร์ที่ 2" ใน URL นั้น มีเพียง _path เพียงตัวเดียว ส่วน _ `john-smith`?
Adrian avatar
cn flag
โครงสร้าง url เดิมก่อนโค้ด htaccess ของฉันมีลักษณะดังนี้: https://example.com/pages.php?PAGE=profile&LINK=john-smith สิ่งเดียวที่ฉันต้องทำตอนนี้คือการลบพารามิเตอร์ตัวแรก (PAGE=profile) เมื่อมีตัวที่สอง เนื่องจากฉันมีสถานการณ์ที่มีเฉพาะพารามิเตอร์ตัวแรกเท่านั้น
kz flag
ดังนั้น เมื่อมีคำขอเข้ามาสำหรับ `example.com/john-smith` (เช่น มีเพียงส่วนเส้นทางเดียวและไม่มีเครื่องหมายทับ) ก็ควรเขียนคำขอใหม่เป็น `/pages.php?LINK=john-smith`?
Adrian avatar
cn flag
ใช่ตรง...
Score:0
ธง kz
RewriteRule ^([^/]+)(/([^/]+))? หน้า.php?PAGE=$1&LINK=$3 [L]

"ปัญหา" กับสิ่งนี้คือมันจะจับคู่คำขอด้วย /จอห์นสมิ ธ (กลุ่มที่ 2 เป็นทางเลือก) แต่เขียนคำขอใหม่เป็น หน้า.php?PAGE=john-smith&LINK=, แทน หน้า.php?LINK=john-smith ตามความจำเป็น. สำหรับสิ่งนี้คุณจะต้องมีกฎแยกต่างหาก ก็ยังตรงกัน /profile/john-smith/อะไร, ทิ้ง /อะไรก็ตาม แต่ยังคงเขียนคำขอใหม่ (ความสัมพันธ์แบบกลุ่มต่อหนึ่ง) ซึ่งอาจเปิดไซต์ของคุณให้กับผู้ส่งสแปม

สมมติว่าคุณไม่อนุญาตให้ใช้จุด (.) ในส่วนเส้นทาง URL (ตามตัวอย่างของคุณ) คุณไม่จำเป็นต้องตรวจสอบว่าคำขอนั้นไม่ได้แมปกับไฟล์ เช่น. คำขอสำหรับ /profile/john-smith ไม่สามารถแมปกับไฟล์ได้หากไฟล์ของคุณทั้งหมดมีนามสกุลไฟล์ ดังนั้นการตรวจสอบระบบไฟล์จึงซ้ำซ้อน

ลองทำสิ่งต่อไปนี้แทน:

# เขียนใหม่ส่วนเส้นทางเดียว
# เช่น. /john-smith ไปยัง page.php?LINK=john-smith
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)$ หน้า.php?LINK=$1 [L]

# เขียนซ้ำสองส่วนของเส้นทาง
# เช่น. /profile/john-smith ไปยัง page.php?PAGE=profile&LINK=john-smith
RewriteCond %{REQUEST_URI} !^/pages/ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)/([^/.]+)$ หน้า.php?PAGE=$1&LINK=$2 [L]

เดอะ เอ็น.ซี ปักธงไว้ก่อน เขียนซ้ำ คำสั่งอาจซ้ำซ้อน

([^/.]+) - ฉันได้เปลี่ยนรูปแบบย่อยการจับภาพเพื่อไม่รวมจุดด้วย และกฎข้อที่สองจะจับคู่เส้นทางสองส่วนพอดี ไม่ใช่ส่วนเดียว หรือ สองส่วนเส้นทาง ดังตัวอย่างของคุณ

Adrian avatar
cn flag
ขอบคุณมากสำหรับการตอบกลับของคุณ! ขออภัย โซลูชันของคุณใช้ไม่ได้กับสถานการณ์ของฉัน... รหัส "สองส่วนส่วน" ใช้ได้เฉพาะเมื่อฉันเปลี่ยน $ ด้วย ? และไม่มีจุด "ส่วนเดียว" ไม่ทำงานเลย
kz flag
@เอเดรียน คุณหมายถึงอะไรโดย "ไม่ทำงาน" เกิดอะไรขึ้นกันแน่? คุณได้รับข้อผิดพลาดหรือไม่? คุณเห็นคำตอบอะไร หาก "ส่วนสองส่วน" ใช้ได้เฉพาะเมื่อคุณเปลี่ยนแปลง แสดงว่ามีการจับคู่บางอย่างที่แตกต่างกับ URL ตัวอย่างตามที่ระบุไว้ คุณมีคำสั่งอะไรอีกบ้างในไฟล์ `.htaccess` นี้ โปรดแก้ไขคำถามของคุณเพื่อรวมไฟล์ `.htaccess` ที่สมบูรณ์พร้อมกับคำสั่งเหล่านี้ - คุณอาจมีข้อขัดแย้ง ไฟล์ `.htaccess` นี้อยู่ที่ไหน คุณมีไฟล์ `.htaccess` อื่นๆ หรือไม่
Adrian avatar
cn flag
ฉันเพิ่งอัปเดตคำถามด้วยกฎทั้งหมดของไฟล์ .htaccess ดังนั้น ไฟล์ htaccess จึงอยู่ในโฟลเดอร์เดียวกันกับ page.php และเป็นไฟล์เดียวที่ฉันมี ไม่ใช่ข้อผิดพลาดเฉพาะสำหรับกฎ "ส่วนเดียว" ที่จริงแล้ว ผลลัพธ์ดูเหมือนหน้าเว็บที่หายไปโดยมีตัวอย่างส่วนหัวและส่วนท้ายของฉันบางส่วน ไม่แสดงเนื้อหาที่ถูกต้องเมื่อโหลดเมื่อฉันเข้าถึงโดยไม่มี URL ที่เขียนใหม่

โพสต์คำตอบ

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