ไม่สามารถเข้าถึงไดเรกทอรีย่อยที่ไม่ใช่ wordpress เนื่องจาก wordpress แทนที่พวกเขาด้วยข้อผิดพลาด 404


34

ฉันอ้างถึงคำถามนี้ถามก่อนหน้านี้และไม่ตอบอย่างเหมาะสม: Wordpress แทนที่ไดเรกทอรีย่อยจริง และยัง ไม่ใช่ "Wordpress" หน้า / รหัสได้รับข้อผิดพลาด 404

ฉันมีปัญหาเดียวกันและฉันได้ลองเกือบทุกอย่างที่ฉันพบในอินเทอร์เน็ต มันเกี่ยวข้องกับการเปิด Permalinks ในเวิร์ดเพรส อย่างไรก็ตามฉันใส่ไฟล์. htaccess ใหม่ในไดเรกทอรีย่อยด้วย:

เขียนซ้ำปิด

และปัญหายังคงมีอยู่ แม้ว่าฉันจะลบไฟล์ wordpress .htaccess ทั้งหมดปัญหายังคงมีอยู่

ฉันได้ลองใช้วิธีแก้ไขปัญหาอื่น ๆ ที่แนะนำเช่น ErrorDocument 401 "การเข้าถึงที่ไม่ได้รับอนุญาต" และ ErrorDocument 404 "การเข้าถึงที่ไม่ได้รับอนุญาต" และ Redirect 301 / mysubdirectory http://www.mydomain.com/mysubdirectory/index.html ในสถานที่ต่าง ๆ ทั้งหมดโดยไม่มีประโยชน์ .

ใครช่วยกรุณาเสนอวิธีแก้ปัญหาอื่นได้ไหม วิธีเดียวที่ฉันสามารถแก้ไขได้คือการปิดลิงก์ถาวร แต่เราต้องการให้เปิด

ขอบคุณ

นิโคล


จะเกิดอะไรขึ้นถ้าคุณเปลี่ยนชื่อ index.php เป็น index.bak ในโฟลเดอร์รูท WordPress ไดเรกทอรียังไม่สามารถเข้าถึงได้หรือไม่?
Horttcore

คุณพยายามกำหนด url พื้นฐานในโฟลเดอร์ย่อยของคุณ. htaccess (ด้วยค่าของโฟลเดอร์ย่อยนี้หรือไม่)
Cédric G

คำตอบ:


28

ฉันสมมติว่าคุณใส่ WordPress ลงในรูทไซต์ของคุณและไดเรกทอรีภายนอกก็อยู่ในรูทไซต์ของคุณด้วย สาเหตุที่เกิดขึ้นคือไฟล์. htaccess ทำตามลำดับชั้น คำสั่งใดก็ตามที่อยู่ในไฟล์. htaccess ระดับบนสุดจะไหลลงมาและนำไปใช้กับไดเรกทอรีทั้งหมดด้านล่าง

หากเป็นกรณีนี้คุณสามารถทำสิ่งใดสิ่งหนึ่งต่อไปนี้

  1. ย้าย WordPress ของคุณไปยังไดเรกทอรีของตัวเอง โปรดดู: http://codex.wordpress.org/Moving_WordPress หากคุณย้าย WordPress ไปยังไดเรกทอรีของตัวเองเพื่อให้อยู่ในระดับเดียวกันในลำดับชั้นไดเรกทอรีเซิร์ฟเวอร์ของคุณเนื่องจากไดเรกทอรีอื่น ๆ กฎการเขียนซ้ำของ WordPress ไม่สามารถส่งผลกระทบต่อไดเรกทอรีอื่นได้

  2. RewriteEngine Off - ปกติจะใช้งานได้ ถ้ามันไม่ทำงานตรวจสอบว่าคุณไม่ได้ใช้การตั้งค่า wildcard DNS หากคุณมีเรคคอร์ด wildcard * ชื่อโฮสต์ชี้ไปที่เว็บเซิร์ฟเวอร์ของคุณในการตั้งค่า DNS ของคุณอาจทำให้เกิดความเสียหายกับ. htaccess และโดเมนย่อย

  3. ในไฟล์. htaccess ในรูทไซต์ของคุณเพิ่มคำสั่งข้างต้น WordPress .htaccess ต่อไปนี้:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} ^/subdirectoryname1/(.*)$ [OR]
    RewriteCond %{REQUEST_URI} ^/subdirectoryname2/(.*)$ [OR]
    RewriteRule ^.*$ - [L]
    </IfModule>
    

หนึ่งในเหล่านี้ควรจะทำงานให้คุณ


17

สิ่งนี้ได้ผลสำหรับฉันในอดีตสำหรับสถานการณ์ที่คล้ายกัน:

วางสิ่งนี้ไว้บน .htaccess

ErrorDocument 401 default

2
ขอบคุณ! ฉันได้ลองหลาย ๆ อย่างแล้ว แต่นี่เป็นทางออกเดียวที่เหมาะกับกรณีของฉัน: ไดเรกทอรีย่อยที่ป้องกันด้วยรหัสผ่าน
Rado

2
ทำงานให้ฉันด้วยเช่นกันคำอธิบายใด ๆ เกี่ยวกับสิ่งที่มันทำและทำไมมันถึงได้ผล?
Asaf

สิ่งนี้ใช้ได้ผลสำหรับฉัน .. ไม่ได้ใช้เวิร์ดเพรส แต่เป็น OpenCart และมีปัญหาเดียวกัน คำอธิบายจะเป็นประโยชน์จริงๆ
billynoah

4

เมื่อฉันคัดลอกไฟล์ของฉันไปยังเซิร์ฟเวอร์เดียวกัน แต่มีโฟลเดอร์ย่อยที่แตกต่างกันดังนั้นเมื่อฉันพยายามเข้าถึงหน้าของฉัน index.php ทำงานได้ดี แต่หน้าอื่นไม่ได้และทำให้ฉันมีข้อผิดพลาด 404 ขออภัยภาษาอังกฤษที่ไม่ดีของฉัน !!

ฉันแค่มองเข้าไปใน htaccess ของฉันต้นฉบับ:

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteCond% {REQUEST_FILENAME}! -f
RewriteCond% {REQUEST_FILENAME}! -d
RewriteRule /index.php [L]

# END WordPress

และใส่ใหม่ด้วย

# BEGIN WordPress

RewriteEngine On
RewriteBase / ไดเรกทอรีย่อยโฟลเดอร์
RewriteCond% {REQUEST_FILENAME}! -f
RewriteCond% {REQUEST_FILENAME}! -d
RewriteRule /subdirectoryfolder/index.php [L]

# END WordPress

สวัสดี @lizette ยินดีต้อนรับสู่ฟอรัม WPSE คุณอาจต้องการตรวจสอบว่าการจัดรูปแบบทำงานอย่างไรที่นี่
Pothi Kalimuthu

4

ฉันเห็นกระทู้นี้มีอายุไม่กี่เดือน แต่ในกรณีที่คุณไม่เคยได้ทำงาน!

ฉันมีปัญหาที่คล้ายกัน แต่ปัญหาของฉันคือการติดตั้ง wordpress ตั้งอยู่ในไดเรกทอรีย่อยซึ่งป้องกันการเข้าถึง URL ไปยังโฟลเดอร์ภายในรูท (นอกไดเรกทอรีติดตั้ง WP) แต่เมื่อเปิดใช้งาน permalinks เท่านั้น เพื่อแก้ปัญหานี้ฉันได้คัดลอกทั้ง index.php และ. htaccess (คัดลอกไม่ย้าย) จากไดเรกทอรีย่อยที่ติดตั้ง WP และวางไว้ทั้งใน root public_html (หรือไดเรกทอรีย่อยใด ๆ ที่คุณพยายามเข้าถึงนอก WP ติดตั้ง directory) ไฟล์. htaccess มีเงื่อนไขการเขียนซ้ำสำหรับ Permalinks อยู่แล้ว:

RewriteEngine On
RewriteBase /subdirectoryinstallfolder/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

เปิดใช้งาน Permalinks เพื่อรีเฟรชและแก้ไขปัญหาทั้งหมด ตรวจสอบให้แน่ใจว่าสิทธิ์ของคุณสำหรับโฟลเดอร์รูทถูกตั้งค่าไว้อย่างถูกต้องเช่นกันซึ่งทำให้ฉันมีปัญหาในอดีต


3

หากคุณยังคงได้รับ 404 เมื่อปิดการใช้งาน htaccess และคุณได้ตรวจสอบเส้นทางแล้วและคุณรู้ว่าไฟล์อยู่ที่นั่นแล้วตัวเลือกเดียวของคุณที่เหลือคือสามสิ่งนี้ ...

ตัวเลือก...

  1. เซิร์ฟเวอร์อาจใช้ระบบปฏิบัติการที่เป็นกรณี ๆ ไป ซึ่งหมายความว่าหากคุณพิมพ์ในพา ธ และไม่ได้ใช้ตัวอักษรที่ถูกต้องและใส่ปลอกมันจะไม่ทำงาน
  2. สิทธิ์: คุณอาจมีการอนุญาตที่ไม่ถูกต้องในไฟล์หรือโฟลเดอร์หรือโฟลเดอร์หลัก ลองเปลี่ยนการอนุญาตเป็น 755 ในไฟล์โฟลเดอร์และโฟลเดอร์พาเรนต์ หากคุณมีสิทธิ์เข้าถึง ssh (เทอร์มินัล) ให้ไปที่รูทของคุณและรัน "chmod -R 755 mydir" นี้และจะตั้งค่าการอนุญาตซ้ำทั้งหมด
  3. หากคุณยังคงมีปัญหาหลังจากนั้นคุณมีปัญหาการกำหนดค่าเซิร์ฟเวอร์ (อาจ Apache) คุณจะต้องพูดคุยกับผู้ให้บริการโฮสต์ของคุณเกี่ยวกับเรื่องนี้

หากไม่มีสิ่งใดที่ใช้งานได้คุณต้องมีโฮสต์ใหม่


2

หลังจากถอนการแก้ไขผมของฉันเกือบ htaccess ในที่สุดฉันก็พบวิธีแก้ปัญหาที่จะทำงานกับ WordPress

ฉันมีปัญหานี้หลังจากติดตั้งสคริปต์ codeiginter ในไดเรกทอรีรากเดียวกันกับที่ติดตั้ง WordPress

หลังจากลองใช้เทคนิคทั้งหมดที่ระบุไว้ที่นี่ฉันยังคงได้รับข้อผิดพลาด 404 ในหน้าเว็บที่เกี่ยวข้องกับสคริปต์ใหม่

ฉันสังเกตว่า WordPress htaccess กำลังเอาชนะ htaccess ของสคริปต์ ฉันยังกล่าวว่าการติดตั้ง WordPress อื่นในไดเรกทอรีเดียวกันไม่มีข้อผิดพลาด 404 นี้

ฉันเพิ่งใช้ htaccess จากการติดตั้ง WordPress ใหม่ในไดเรกทอรีเซิร์ฟเวอร์เดียวกันและเพิ่มลงในโฟลเดอร์ที่สคริปต์ของฉันตั้งอยู่ นี่คือลักษณะ:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /subdirectoryname/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /subdirectoryname/index.php [L]
</IfModule>

แทนที่ชื่อไดเรกทอรีย่อยด้วยชื่อไดเรกทอรีของคุณและวางไฟล์ htaccess นี้ไว้ในโฟลเดอร์ที่สคริปต์ของคุณอยู่

ตัวอย่าง: หากเว็บไซต์ถูกติดตั้งที่นี่

public_html/

และโฟลเดอร์ใหม่ตั้งอยู่

`public_html/example`

คัดลอก htaccess ด้านบนและบันทึกไว้ในโฟลเดอร์ 'ตัวอย่าง' และสิ่งนี้จะใช้ได้


1

ฉันดูคำตอบที่นี่หลายครั้งเพราะฉันพบปัญหาที่คล้ายกัน ฉันมีไฟล์ในไดเรกทอรีย่อยที่จะทำให้เกิดข้อผิดพลาด 404 เมื่อฉันพยายามเข้าถึง สิ่ง. htaccess ทั้งหมดไม่สามารถแก้ไขได้ตามที่ Kirsten Douglas กล่าว Wordpress ทำงานได้แล้ว

ทางออกของฉัน

ฉันพบบทความนี้หลังจากตรวจสอบ error_log บนเซิร์ฟเวอร์ ฉันได้รับข้อความเกี่ยวกับ uid ที่ผิดสำหรับสคริปต์ ฉันยังสังเกตเห็นว่า 404 ไม่ได้ถูกโยนเนื่องจากไฟล์ แต่เนื่องจากเซิร์ฟเวอร์ไม่สามารถให้บริการไฟล์ 500.html เช่นฉันมีข้อผิดพลาด 500

ปรากฎว่าฉันสร้างไฟล์เป็นรูทและจำเป็นต้องเปลี่ยนความเป็นเจ้าของให้เป็นเจ้าของเว็บไฟล์

ฉันหวังว่านี่จะช่วยให้ผู้อื่นที่มีปัญหาเดียวกัน!


0

คุณควรจะสามารถเพิ่มRewriteCondคำสั่งที่จะทำให้แน่ใจว่ากฎ WordPress ถูกละเว้นสำหรับการร้องขอภายในโฟลเดอร์ย่อยของคุณ

RewriteCond %{REQUEST_URI} !^/mysubdirectory
# rest of WordPress rewrite rules

อย่างไรก็ตามคุณบอกว่าแม้ไม่มี WordPress .htaccessคุณกำลังประสบปัญหาหรือไม่ อะไรคือเนื้อหาของไดเรกทอรีย่อยของคุณ.htaccess?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.