ฉันจะซ่อนชื่อโฟลเดอร์จาก URL โดยใช้ .htaccess ได้อย่างไร

ฉันมีเว็บไซต์ที่มีโฟลเดอร์รูท 'www' แต่ฉันใส่ไฟล์ php ทั้งหมดรวมถึง index.php ไว้ในโฟลเดอร์ย่อยของรูท ฉันเขียนไฟล์ .htaccess ให้กับตัวเองเพื่อเปลี่ยนเส้นทาง ดังนั้นหากฉันป้อน www.test.com ไฟล์นั้นจะข้ามไปที่ www.test.com/folder และแสดง index.php

ด้านล่างนี้คือ .htaccess ของฉันซึ่งฉันใส่ไว้ในรูท

 RewriteEngine On
 RewriteBase /
 RewriteRule ^folder2 - [L] 
 #ignore folder2 in which I put important files, but no works for the website
 RewriteCond %{REQUEST_URI} !^/folder(.*)
 RewriteRule (.*) /folder/$1

ตอนนี้ ฉันต้องการเปลี่ยนไฟล์ .htaccess เพื่อให้บรรลุเป้าหมายเหล่านี้:

  1. เมื่อฉันป้อน www.test.com ให้ข้ามไปที่ www.test.com/folder ตามปกติ แต่แสดง URL โดยไม่มี โฟลเดอร์
  2. ทุกหน้าในโฟลเดอร์จะแสดง URL โดยไม่มีชื่อโฟลเดอร์ เช่น

    www.test.com/shop/page1 -> www.test.com/page1

ฉันค้นหาสคริปต์บางส่วนแล้ว แต่ไม่มีสคริปต์ใดทำงานเลย


person user3404516    schedule 12.05.2015    source แหล่งที่มา
comment
ลองดูสิ... stackoverflow.com/questions/18361419 /   -  person NinjaCat    schedule 12.05.2015
comment
/shop/ เกี่ยวข้องกับ /folder/ อย่างไร พวกเขาเหมือนกันหรือเปล่า?   -  person anubhava    schedule 12.05.2015


คำตอบ (3)


ฉันพบคำถามที่เกี่ยวข้องซึ่งช่วยตอบปัญหาของคุณได้ ตัวอย่างจากคำตอบคือ (หมายเหตุ: ปรับตามความต้องการของคุณ):

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+folder/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^folder/)^(.*)$ /folder/$1 [L,NC]

ข้อมูลอ้างอิง: https://stackoverflow.com/a/18361995/3673491

person João Cerqueira    schedule 12.05.2015
comment
ฉันควรแทนที่ไฟล์นี้ด้วย .htaccess ของฉันในรูทใช่ไหม ไซต์ต่างๆ ข้ามไปที่โฟลเดอร์เท่านั้น แต่ url ยังคงเป็น 'www.test.com/folder' - person user3404516; 12.05.2015
comment
โปรดทราบว่าฉันเพิ่งอัปเดตโค้ดด้วยคำตอบจากคำแนะนำ @NinjaCat ซึ่งปรับให้เข้ากับความต้องการของคุณอีกครั้ง ตรวจสอบและบอกฉันว่ามันทำงานอย่างถูกต้องในขณะนี้หรือไม่ ฉันได้ทำการทดสอบในพื้นที่ง่ายๆ ที่นี่ และได้ผล โปรดทราบว่าคุณต้องเปลี่ยนทุกที่ที่คุณเห็น folder ด้วยชื่อจริงที่คุณต้องการตั้งให้กับโฟลเดอร์นั้น - person João Cerqueira; 12.05.2015

ตามกฎปัจจุบันของคุณ คุณสามารถปรับเปลี่ยนได้เล็กน้อย

 RewriteEngine On
 RewriteBase /
 #ignore folder2 in which I put important files, but no works for the website
 RewriteRule ^folder2/? - [L] 

 RewriteRule ^/?$ /folder/ [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ /folder/$1 [L]
person Panama Jack    schedule 12.05.2015
comment
มันไม่ทำงาน เว็บไซต์ไม่แสดงหน้า index.php อีกต่อไป - person user3404516; 12.05.2015
comment
มันยังไม่โดด.. ฉันควรวางไฟล์นี้ไว้ในโฟลเดอร์หรือเก็บไว้ในรูท? - person user3404516; 12.05.2015
comment
คุณหมายถึงอะไร ไม่กระโดด? ฉันไม่เข้าใจว่าคุณหมายถึงอะไร คุณกำลังพิมพ์อะไรในเบราว์เซอร์ และคุณคาดว่าจะเกิดอะไรขึ้น? เริ่มต้นที่นั่น - person Panama Jack; 12.05.2015

คุณสามารถใช้รหัสด้านล่าง

RewriteEngine On
RewriteBase /
RewriteRule ^/?$ /folder/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /folder/$1 [L]
person Bhavik Koradiya    schedule 17.07.2017