.htaccess Rewrite ไดเรกทอรีย่อยของ Wordpress โดยไม่ทำลายไดเรกทอรีย่อยอื่น ๆ

Aug 20 2020

ดังนั้นฉันจึงติดตั้ง WordPress ไว้/wp/แต่ฉันต้องการให้ URL ของ WordPress ทั้งหมดถูกเขียนใหม่เพื่อให้ปรากฏในไดเรกทอรีราก ขณะนี้ฉันใช้งานได้แล้ว (ดูด้านล่าง) แต่ฉันต้องการเปลี่ยน.htaccessเพื่อไม่ให้ทำลายไดเรกทอรีย่อยอื่น ๆ

ตัวอย่างเช่นหากฉันต้องการเยี่ยมชมwww.example.com/images/image.pngปัจจุบันมันเปลี่ยนเส้นทางฉันไปที่หน้า 404 บน WordPress

เป็นไปได้ด้วย.htaccessเหรอ?

รหัสปัจจุบัน:

RewriteEngine on

#Wordpress
# Rewrites all URLS without wp in them
RewriteCond %{REQUEST_URI} !^/wp/

# Rewrites all URLS [Replace "example" with the actual domain, without the TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.

# Rewrite all those to insert /folder
RewriteRule ^(.*)$ /wp/$1 [L]

อัปเดต : ทดสอบคำแนะนำของ MrWhite ด้วยโหมดไม่ระบุตัวตนและเบราว์เซอร์ที่สอง ไม่มีผลอะไร. .htaccessไฟล์ใหม่:

RewriteEngine on

#Wordpress
# Rewrites all URLS without wp in them
RewriteCond %{REQUEST_URI} !^/wp/

# Rewrites all URLS [Replace "example" with the actual domain, without the TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.

# Rewrite all those to insert /folder
RewriteRule ^(.*)$ /wp/$1 [L]
# Request does not map to an existing file
RewriteCond %{REQUEST_FILENAME} !-f

คำตอบ

MrWhite Aug 21 2020 at 01:54

คุณต้องเพิ่มเงื่อนไขเพื่อยกเว้นไฟล์ที่มีอยู่มิฉะนั้นคำขอ/images/image.pngจะถูกเขียนใหม่/wp/images/image.pngและทริกเกอร์ 404 ใน WordPress (เว้นแต่/wp/images/image.pngจะมีอยู่จริง)

ตัวอย่างเช่นเพิ่มเงื่อนไขต่อไปนี้ในกฎที่มีอยู่ของคุณ:

# Request does not map to an existing file
RewriteCond %{REQUEST_FILENAME} !-f

อัปเดต:ดูเหมือนจะไม่ได้ผล ยังคงไปที่หน้า WordPress 404

คุณวางRewriteCondคำสั่งผิดที่

RewriteCondคำสั่งไม่ใช่ข้อความที่แยกจากกันโดยสิ้นเชิง แต่เป็นเงื่อนไขที่ใช้กับRewriteRuleคำสั่งที่ตามมา ด้วยตัวเองRewriteCondคำสั่งไม่ทำอะไร

RewriteCondความต้องการสั่งไป (ที่ใดก็ได้) ก่อนที่จะRewriteRuleสั่ง:

RewriteEngine on

#Wordpress
# Rewrites all URLS without wp in them
RewriteCond %{REQUEST_URI} !^/wp/

# Rewrites all URLS [Replace "example" with the actual domain, without the TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.

# Request does not map to an existing file
RewriteCond %{REQUEST_FILENAME} !-f

# Rewrite all those to insert /folder
RewriteRule ^(.*)$ /wp/$1 [L]

นอกจากนี้ให้ดู.htaccessไฟล์"WordPress" ใน/wpไดเรกทอรีย่อยเพื่อใช้อ้างอิง นั่นก็เหมือนกัน

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