WordPress ทำให้ฉันไม่พบหน้า 404 สำหรับทุกหน้ายกเว้นหน้าแรก


115

ทันใดนั้นฉันก็ไปที่เว็บไซต์ WordPress ของฉันและทุกหน้าให้ฉันไม่พบหน้า 404 ฉันสมมติว่าปัญหาอยู่ที่โครงสร้างลิงก์ถาวรซึ่งฉันสาบานได้ว่าฉันไม่ได้สัมผัส การตั้งค่าลิงก์ถาวรเป็น "เดือนและชื่อ"

ฉันได้ค้นคว้ากรณีที่คล้ายกันของปัญหานี้ทางออนไลน์และมีส่วนเกี่ยวข้องกับ.htaccessไฟล์หรือไม่ ฉันพยายามค้นหา แต่ก็ทำไม่ได้ บางทีมันอาจถูกลบไปแล้ว? มันควรจะอยู่ที่ไหน

ข้อเสนอแนะใด ๆ จะเป็นประโยชน์

และแน่นอนฉันเห็นไฟล์ที่ซ่อนอยู่


แนะนำให้คุณถามสิ่งนี้ในwordpress.stackexchange.comเช่นกัน
James Wiseman

คำตอบ:


95

.htaccess เป็นไฟล์ที่ซ่อนอยู่ดังนั้นคุณต้องตั้งค่าไฟล์ทั้งหมดให้มองเห็นได้ใน ftp ของคุณ

ฉันขอแนะนำให้คุณคืนโครงสร้างลิงก์ถาวรเป็นค่าเริ่มต้น (? p = ID) เพื่อให้แน่ใจว่า. htaccess เป็นปัญหา

หลังจากนั้นคุณสามารถตั้งค่าโครงสร้าง "เดือนและชื่อ" อีกครั้งและดูว่าใช้ได้หรือไม่

PS: คุณอัปเกรดเป็น 3.1 แล้วหรือยัง? ฉันเคยเห็นบางคนที่มีปัญหาเกี่ยวกับปลั๊กอินในกรณีนี้


1
ใช่ฉันได้แสดงไฟล์ที่ซ่อนอยู่ ฉันได้เปลี่ยนไปมาจากค่าเริ่มต้นเป็น perma และใช้งานได้ตามค่าเริ่มต้น นอกจากนี้ wordpress ยังอัพเดตตัวเองหรืออะไร? ฉันสังเกตเห็นว่าเมื่อฉันเข้าสู่ระบบฉันมีแถบงานผู้ดูแลระบบใหม่บนเว็บไซต์ของฉันซึ่งฉันไม่เคยมีมาก่อน ฉันไม่รู้ว่ามันไปอยู่ที่นั่นได้อย่างไร
Adam

มีคนอัปเดตเป็น 3.1 ผิดพลาดดังนั้นจึงขัดแย้งกับปลั๊กอิน
Adam

1
การหายไป.htaccessอาจนำไปสู่ปัญหานี้ได้เช่นกันสิ่งที่คุณแก้ไขลิงก์ถาวรดังนั้นตรวจสอบก่อนอย่าซ่อนหรือหายไป
Osify

1
เพียงลงชื่อเข้าใช้ผู้ดูแลระบบ WordPress และบันทึกพาร์มาลิงค์อีกครั้ง สิ่งนี้จะสร้างไฟล์. htaccess หรืออัปเดตไฟล์ที่มีอยู่
Keyur Patel

ฉันได้ลองใช้ admin และอัปเดตไฟล์. htaccess ด้วยตนเอง แต่ยังคงเป็นปัญหาเดิม ปิดการใช้งานปลั๊กอินเช่นกัน แต่ไม่สามารถแก้ไขปัญหาลิงก์ถาวร
Jaymin

56

โดยทั่วไปไฟล์. htaccess ควรมีอยู่และ httpd.conf ควรถูกต้อง

ในกรณีของฉันฉันเปลี่ยนไฟล์ /etc/apache2/apache2.conf ในส่วน:

<Directory "/var/www/html">

บรรทัดที่เปลี่ยนคือ:

AllowOverride None

ถึง

AllowOverride All

และรีสตาร์ทเว็บเซิร์ฟเวอร์ด้วย

systemctl restart apache2

1
ขอบคุณที่ช่วย ในกรณีของฉันการตั้งค่า AllowOverride หายไป
ผ้าขี้ริ้ว

1
สิ่งนี้แก้ไขให้ฉันด้วย ฉันใช้สก๊อตช์บ็อกซ์เร่ร่อนเพื่อสิ่งที่คุ้มค่า
Matt Kaye

2
นี่เป็นปัญหาเกือบตลอดเวลา ควรเป็นคำตอบอันดับต้น ๆ
Noel Baron

สิ่งนี้แก้ไขปัญหาให้ฉัน - ควรเป็นคำตอบที่ยอมรับได้
Charles

52

การแก้ไขปัญหาที่ง่ายมากถ้าคุณใช้ Permalinks อื่น ๆ กว่าdefaultเช่นDay and name, Month and name, Numeric, Post nameหรือCustom Structureคุณจะต้องเท่านั้น

เข้าสู่ระบบพื้นที่ผู้ดูแลระบบของคุณ: Settings > Permalinksซึ่งควรเป็น:http://yoursite.com/wp-admin/options-permalink.php

เลือกDefaultการตั้งค่าลิงก์ถาวรจากนั้นบันทึกการเปลี่ยนแปลง

จากนั้นคุณสามารถส่งคืนอีกครั้งเป็นตัวเลือกลิงก์ถาวรอื่น ๆ ของคุณหรือเก็บไว้ตามdefaultที่คุณต้องการ

โปรดทราบว่าปัญหานี้อาจเกิดขึ้นได้เมื่อคุณย้ายไซต์ของคุณจากโดเมนหรือตำแหน่งไปยังอีกที่หนึ่ง


1
สิ่งนี้ช่วยฉันได้บ้างฉันมีข้อผิดพลาดฐานข้อมูลและหลังจากนั้นทุกหน้าของฉันก็เป็น 404 การสลับตัวเลือกลิงก์ถาวรเป็นตัวเลือกอื่น (เช่นธรรมดา) จากนั้นกลับไปที่ตัวเลือกเริ่มต้นแก้ไขลิงก์ทั้งหมดของฉัน!
PaulBGD

ดีใจที่ได้ยิน :)
usama sulaiman

2
คำตอบที่สมบูรณ์แบบ +100
handiansom

ฉันจะเปลี่ยนกลับไปใช้การตั้งค่าลิงก์ถาวรเริ่มต้นmysite.com/wp-adminได้อย่างไรแม้ว่าจะไม่ทำงาน
J86

คำตอบที่สมบูรณ์แบบ +10086
Aflext

29

หากพฤติกรรมเริ่มต้น ( example.com/?p=42) ใช้งานได้คุณควร:

  • เปลี่ยนเป็นสไตล์ลิงก์ถาวรที่คุณต้องการ: Admin: Settings > Permalinksแล้วคลิกบันทึก บางครั้งก็ช่วยแก้ไขปัญหาได้ หากไม่ได้:
  • ตรวจสอบว่าไฟล์มีการเปลี่ยนแปลงและในขณะนี้มีสาย/path/to/wordpress/.htaccess RewriteEngine Onหากไม่รวมบรรทัดแสดงว่าเป็นปัญหาสิทธิ์ของ Wordpress
  • ตรวจสอบว่าโหลดโมดูล 'เขียนซ้ำ' แล้ว: สร้างไฟล์ PHP ด้วย

    <?php
      phpinfo()
    ?>

    mod_rewriteในนั้นเปิดในเบราว์เซอร์และการค้นหา ควรอยู่ในส่วน "โมดูลโหลด" หากยังไม่ได้เปิดใช้งาน - ดูที่เริ่มต้นของคุณ Apache index.htmlไฟล์สำหรับรายละเอียด - a2enmodในอูบุนตูคุณทำมันด้วยผู้ช่วย

  • ตรวจสอบว่าเซิร์ฟเวอร์ apache กำลังดู.htaccessไฟล์ เปิดhttpd.conf- /etc/apache2/apache2.confหรือเป็นของอูบุนตูของทางเลือก ในนั้นคุณควรมีบางอย่างเช่น

    <Directory /path/to/wordpress>
      Options Indexes FollowSymLinks
      AllowOverride All
      Require all granted
    </Directory>
  • หลังจากทำการเปลี่ยนแปลงเหล่านี้แล้วอย่าลืมรีสตาร์ทเซิร์ฟเวอร์ apache ของคุณ sudo service apache2 restart


20

ถ้าทำงานทั้งหมด Dont นี้ .htaccess ของคุณถูกต้องและ Permalinks หลอกลวงทำงาน did not, คุณอาจไม่ได้เปิดการใช้งานของคุณ apache2 rewite พอควร

ฉันดำเนินการสิ่งนี้และปัญหาของฉันได้รับการแก้ไขแล้ว:

 sudo a2enmod rewrite 

ค้นหาmod_rewriteในphpinfo();หน้าเพื่อตรวจสอบว่าคุณได้เปิดใช้งานหรือไม่ มันเป็นLoaded Modulesของapache2
vanduc1102

9

ภายในอินเทอร์เฟซผู้ดูแลระบบ WordPress ให้ทำดังต่อไปนี้:

  1. ไปที่การตั้งค่าผู้ดูแลระบบ

  2. คลิกที่ลิงก์ถาวรและเลือกชื่อโพสต์ในปุ่มตัวเลือก

  3. เลื่อนลงและคุณจะเห็น.htaccessรหัสที่นี่เช่น

    <IfModule mod_rewrite.c>
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /wordpress/index.php [L]
    </IfModule> 
  4. คัดลอกรหัสและวางใน.htaccessไฟล์

1
ฉันจะหาสิ่งนี้ได้ที่ไหน ไม่มีอะไรเช่นนี้ในลิงก์ถาวร
Boris_yo

@Boris_yo เท่าที่ฉันรู้กฎจะปรากฏขึ้นก็ต่อเมื่อhtaccessไฟล์ของคุณnotเขียนได้เท่านั้น .. ถ้าเป็น wordpress จะเขียนเอง ...
Obmerk Kronen

1
คำตอบนี้เจ๋งมาก! และจะไม่เคยรู้เกี่ยวกับเรื่องนี้เว้นแต่จะใช้ WP ใน Linux ขอบคุณมาก
Mayeenul Islam

7

ข้อผิดพลาดนี้เกิดจากการปิดใช้งาน mod rewrite ในเอกสาร apache httpd.conf เพียงแค่ยกเลิกการแสดงความคิดเห็นและเพลิดเพลินกับลิงก์ถาวรที่เป็นมิตรกับ SEO


4
  • ตรวจสอบว่าไดเร็กทอรีบน. htaccess ถูกต้อง
  • ตรวจสอบว่าช่อง "siteurl" และ "home" ถูกต้อง

1
สำหรับฉันบ้านคือปัญหา ฉันแก้ไขมันและกลับมาใช้งานได้ Obrithankyou José Carlos
Tiago Gouvêa

4

เรามีปัญหาเดียวกันและแก้ไขได้โดยตรวจสอบ error.log ของโฮสต์เสมือนของเรา เราพบข้อความต่อไปนี้:

AH00670: อ็อพชัน FollowSymLinks และ SymLinksIfOwnerMatch ปิดอยู่ดังนั้นคำสั่ง RewriteRule จึงถูกห้ามด้วยเนื่องจากมีความสามารถในการหลีกเลี่ยงข้อ จำกัด ไดเร็กทอรี: / srv / www / htdocs / wp-intranet /

วิธีแก้ปัญหาคือการตั้งค่าOptions AllและAllowOverride Allในการกำหนดค่าโฮสต์เสมือนของเรา


3

หากคุณมี FTP เข้าถึงบัญชีของคุณ:

ขั้นแรกเข้าสู่ระบบ wp-admin ของคุณแล้วไปที่การตั้งค่า> ลิงก์ถาวร

คุณควรเห็นบางอย่างที่ด้านล่างซึ่งระบุว่า:

"ถ้าไฟล์. htaccess ของคุณเขียนได้เราสามารถดำเนินการได้โดยอัตโนมัติ แต่ไม่เป็นเช่นนั้นกฎเหล่านี้คือกฎ mod_rewrite ที่คุณควรมีในไฟล์. htaccess คลิกในช่องและกด CTRL + a เพื่อเลือกทั้งหมด"

หากเป็นจริงให้ทำดังต่อไปนี้:

  1. ไปที่การตั้งค่าสำหรับไคลเอนต์ FTP ของคุณและตรวจสอบให้แน่ใจว่ามีการแสดงไฟล์ที่ซ่อนอยู่ (แตกต่างกันไปขึ้นอยู่กับไคลเอนต์ FTP ของคุณ) - หากคุณไม่ทำเช่นนี้คุณจะไม่พบไฟล์ htaccess ของคุณ

  2. ไปที่โฟลเดอร์ที่มีไดเรกทอรี wp-admin, wp-content, wp-includes ตรวจหาไฟล์. htaccess หากมีอยู่ให้ข้ามไปยังขั้นตอนที่ 4

  3. หากไม่มีอยู่ให้สร้างไฟล์เปล่าใหม่ในโปรแกรม FTP ของคุณที่เรียกว่า. htaccess

  4. เปลี่ยน CHMOD สำหรับไฟล์. htaccess ของคุณเป็น 666 (ค่ากำหนดของคุณว่าคุณต้องการทำอย่างไร)

  5. กลับไปที่หน้า Permalinks ของคุณและแก้ไขโครงสร้างลิงก์ที่คุณต้องการ ปัญหาควรได้รับการแก้ไข!

  6. อย่าลืมเปลี่ยน chmod ของไฟล์ htaccess กลับเป็น 644 หลังจากเสร็จสิ้น

เพิ่งมีปัญหาเดียวกันและดูเหมือนว่าจะแก้ไขได้ทันที! โชคดี!


"mod_rewrite" นี่คือปัญหาฉันลืมเปิดใช้งาน! ขอบคุณ :)
Chemaclass

3

โดยส่วนใหญ่ปัญหานี้ได้รับการแก้ไขโดยเพียงแค่เข้าไปที่หน้าการตั้งค่า -> ลิงก์ถาวรในผู้ดูแลระบบ WordPress และคลิกบันทึก (ตามที่มีคำตอบอื่น ๆ หลายคำตอบ) เมื่อเข้าถึงหน้านี้ WordPress จะเขียนคำสั่งใน.htaccessไฟล์ใหม่ซึ่งช่วยแก้ไขปัญหาได้อย่างน่าอัศจรรย์ ปัญหานี้มักเกิดขึ้นหลังจากย้ายไซต์ (ไซต์หยุดทำงานเนื่องจาก.htaccessถูกทิ้งไว้ข้างหลังหรือต้องอัปเดตการตั้งค่า)

หาก WordPress ไม่มีสิทธิ์ที่ถูกต้องในการเขียน.htaccessไฟล์ข้อความแจ้งจะปรากฏที่ด้านบนของหน้าและคำแนะนำเพิ่มเติมที่ด้านล่างเมื่อบันทึกการตั้งค่า ในกรณีนี้คุณต้องแก้ไข.htaccessไฟล์ด้วยตัวเองหรือดีกว่าเพื่อแก้ไขสิทธิ์ในไฟล์นั้น ไฟล์อยู่ที่รูทของการติดตั้ง WordPress cdลงในไดเร็กทอรีและsudo chmod 644 .htaccess. chownนอกจากนี้คุณยังอาจต้องการตรวจสอบหากไฟล์ที่อยู่ในกลุ่มที่ถูกต้องและการเปลี่ยนแปลงที่จำเป็นต้องมี สอบถามผู้ให้บริการโฮสติ้งของคุณหากคุณไม่ทราบวิธีดำเนินการดังกล่าว

หากคุณใช้โฮสติ้งที่ใช้ร่วมกันนั่นอาจเป็นสิ่งที่คุณทำได้ทั้งหมด หากคุณยังคงมีปัญหาคุณอาจต้องการพูดคุยกับฝ่ายสนับสนุนของผู้ให้บริการโฮสติ้งของคุณ มิฉะนั้นตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน.htaccessไฟล์บนเซิร์ฟเวอร์ตามที่ @georgeos แนะนำแล้ว โปรดทราบhttpd.confว่าไม่ได้ใช้เสมอไป ( Ubuntu ระบุว่าเลิกใช้งานแล้วแต่เอกสาร Apache อย่างเป็นทางการยังคงระบุว่ามักเป็นไฟล์กำหนดค่าหลัก ) /etc/httpd/conf/httpd.confและ/etc/apache2/apache2.confดูเหมือนจะเป็นตำแหน่งที่พบบ่อยที่สุดสำหรับไฟล์นี้ ค้นหาบล็อกสำหรับโฟลเดอร์สาธารณะที่มักจะ<Directory /var/www/>และทำให้แน่ใจว่าคำสั่งมีการตั้งค่าAllowOverride Allหากตั้งค่าเป็นไฟล์Noneของคุณ.htaccessจะถูกละเว้นโดยเซิร์ฟเวอร์



2

คุณอาจมี. htaccess ไม่ได้รับอนุญาตในการตั้งค่าเว็บโฮสต์ การตั้งค่าเป็นลิงก์ถาวรเริ่มต้นจะใช้ได้ในกรณีนั้น


1

กรณีที่ 1: - ให้เราคิดว่าหากย้ายไซต์จากโฮสติ้งหนึ่งไปยังโฮสติ้งอื่นหากพบปัญหาประเภทนี้

วิธีแก้ไข: - เพียงไปที่รหัสไฟล์. htaccess สำเนาเซิร์ฟเวอร์เก่าจากนั้นวางในไฟล์. htaccess ของเซิร์ฟเวอร์ใหม่ 99% ฉันจะทำงาน


0

ฉันมีปัญหาเดียวกันดังนั้นฉันจึงลบ Apache และสร้างใหม่อีกครั้งและปัญหาได้รับการแก้ไข


0

เพียงไปที่การตั้งค่า -> ลิงก์ถาวรในแผงควบคุมของคุณจากนั้นคลิกปุ่มบันทึกการเปลี่ยนแปลงในช่วงสุดท้าย \


0

หากการติดตั้ง WordPress ของคุณอยู่ในโฟลเดอร์ย่อย (เช่นhttps://www.example.com/subfolder ) ให้เปลี่ยนบรรทัดนี้ใน WordPress ของคุณ.htaccess

RewriteRule . /index.php [L]

ถึง

RewriteRule . /subfolder/index.php [L]

การทำเช่นนี้หมายความว่าคุณกำลังบอกให้เซิร์ฟเวอร์มองหา WordPress index.phpในโฟลเดอร์ WordPress (เช่นhttps://www.example.com/subfolder ) แทนที่จะอยู่ในโฟลเดอร์สาธารณะ (เช่นhttps://www.example.com )


0

ฉันเพิ่งเปลี่ยนลิงก์ถาวรเป็น 'เดือนและวัน' ของโพสต์ทั้งหมดโดยไปที่การตั้งค่า> ลิงก์ถาวร

ตอนนี้โพสต์ทั้งหมดเปิดอยู่และทำงานได้ดี

อีกครั้งฉันเปลี่ยนชื่อโพสต์ทั้งหมดเป็นลิงก์ถาวร มันทำงานได้ดีอีกครั้ง

วิธีนี้ใช้ได้ผลสำหรับฉัน :-)


0

สำหรับผู้ใช้ nginx

ใช้สิ่งต่อไปนี้ในไฟล์ conf สำหรับไซต์ของคุณ (โดยปกติ/etc/nginx/sites-available/example.com)

location / { try_files $uri $uri/ /index.php?q=$uri&$args; }

สิ่งนี้ทำให้คำขอลิงก์ถาวรทั้งหมดไปยัง index.php ด้วยสตริง URI และอาร์กิวเมนต์ที่ให้มา ทำsystemctl reload nginxเพื่อดูการเปลี่ยนแปลงและการเชื่อมโยงที่ไม่ใช่หน้าแรกของคุณควรจะโหลด


0

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

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


-1

ฉันมีปัญหานี้เมื่อไม่นานมานี้ ฉันรีเซ็ต Permalink ของฉันเป็นค่าเริ่มต้นหรือเพียงแค่บันทึกไว้อัปเดตธีม / คอร์เป็น (4.7.4) / ปลั๊กอินปิดใช้งานปลั๊กอินทั้งหมดเปลี่ยนเป็นธีมเริ่มต้นฐานข้อมูลที่ปรับให้เหมาะสม. htaccess เป็นค่าเริ่มต้นตรวจสอบสิทธิ์ของไฟล์แล้ว mod_rewrite เปิดอยู่ .

จนถึงตอนนี้ไม่มีอะไรทำงานโพสต์หน้าใหม่หน้า / ติดต่อยกเว้นสำหรับหน้าเก่า

โดยทั่วไปหน้า / URL ที่ใช้งานไม่ได้คือ:

/breeding
/training
/training/*
/breeding/*

สุดยอดฉันพบไฟล์เหล่านี้ในโฟลเดอร์รูท:

/breeding.php และ /training.php

ฉันเปลี่ยนชื่อทั้งสองไฟล์และหน้าข้างบนใช้งานได้

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