HTTP 404 mit Post-Namen-Permalink

Lesezeit: 7 Minuten

Benutzeravatar von Ortund
Ortund

Okay, ich habe gerade die erste Seite dieser Website erstellt. Es funktioniert, wenn ich die Standard-Permalink-Einstellungen verwende.

Wenn ich die Permalink-Einstellungen ändere, um den Post-Namen zu verwenden, erhalte ich einen HTTP 404.

Ich bin mir nicht sicher, was schief gelaufen ist oder ob ich etwas kaputt gemacht habe. Kann mir jemand bei der Reparatur helfen?

Die Seite wird auf Apache gehostet.

Seite existiert, Link ist defekt

Benutzeravatar von Jared Cobb
Jared Cobb

Verwendest du XAMPP oder MAMP? Es gibt ein paar häufige Probleme mit diesen Umgebungen, die dem WordPress Codex entnommen sind: Permalink-Probleme beheben

Benutzer von XAMPP (Windows): Einige Versionen von XAMPP aktivieren standardmäßig nicht mod_rewrite (obwohl es in Apache kompiliert ist). Um es zu aktivieren – und damit WordPress zu ermöglichen, die .htaccess-Datei zu schreiben, die zum Erstellen hübscher Permalinks benötigt wird – müssen Sie apache/conf/httpd.conf öffnen und die Zeile LoadModule rewrite_module modules/mod_rewrite.so auskommentieren (d. h. das Hash/Pound-Zeichen löschen ganz vorne in der Reihe).

Benutzer von WAMP (Windows): Einige Versionen von WAMP (alle Versionen?) aktivieren mod_rewrite nicht oder erlauben das Folgen von SymLinks standardmäßig nicht. Um die erforderliche Funktionalität zu aktivieren, navigieren Sie zur Datei apache/conf/httpd.conf, öffnen Sie sie mit einem Texteditor und kommentieren Sie die Zeile LoadModule rewrite_module modules/mod_rewrite.so aus (dh löschen Sie das Rauten-/Pfundzeichen am Anfang der Zeile). Dann gibt es weiter unten in derselben Datei einen Abschnitt, der mit der Zeile “Options FollowSymlinks” beginnt. Ändern Sie die zweite Zeile in diesem Abschnitt von „AllowOverride none“ in AllowOverride all. Speichern Sie die bearbeitete httpd.conf und starten Sie alle WAMP-Module neu. Ihre Permalinks sollten jetzt funktionieren.

Sie könnten auch sehen Permalinks ohne mod_rewrite wenn Ihre Sandbox nicht hat mod_rewrite verfügbar.

Apache

Wenn Sie Apache verwenden, gibt es normalerweise zwei weitere Übeltäter für defekte Permalinks: .htaccess wird nicht generiert (aufgrund von Berechtigungseinstellungen) oder Apaches AllowOverride Direktive ist nicht aktiviert.

Erstens, wenn Sie sich per SSH in Ihren Server einloggen, sehen Sie eine generierte .htaccess-Datei im Stammverzeichnis? Wenn nicht, hat WordPress möglicherweise keine Berechtigung zum Schreiben dieser Datei. Es ist auch möglich die Datei tut existieren, aber dass WordPress sie nicht bearbeiten kann. In jedem Fall können Sie chmod diese Datei (und erstellen Sie sie, falls sie nicht existiert) auf 666.

Stellen Sie als Nächstes sicher, dass Ihre Apache-Konfiguration die folgenden Einstellungen hat:

  <Directory />
    Options FollowSymLinks
    AllowOverride All
 </Directory>

Lesen Sie abschließend die Permalink-Probleme beheben Abschnitt des WordPress Codex. Es gibt mehrere andere Tipps und Vorschläge, warum Permalinks möglicherweise nicht funktionieren.

  • Diese wird auf Apache gehostet

    – Ortund

    17. Juni 2014 um 14:09 Uhr

  • @Ortund Entschuldigung, das habe ich verpasst. Ich habe meine Antwort aktualisiert, hoffentlich hilft das.

    – Jared Cobb

    17. Juni 2014 um 14:24 Uhr

  • Sie haben es nicht verpasst, ich dachte, es sei selbstverständlich, also habe ich diese Informationen nicht aufgenommen. Habe es jetzt aber hinzugefügt

    – Ortund

    17. Juni 2014 um 15:08 Uhr

  • Okay, die .htaccess sollte im Root-Verzeichnis für WP oder im Root-Verzeichnis für das Theme sein?

    – Ortund

    17. Juni 2014 um 15:09 Uhr

  • @Ortund Es sollte sich im Stammverzeichnis der Website selbst befinden (und es sieht so aus, als ob WordPress im Stammverzeichnis Ihrer Website ausgeführt wird). Es sollte auf dem gleichen Niveau sein wie das erste WordPress index.php Datei.

    – Jared Cobb

    17. Juni 2014 um 15:12 Uhr

In meinem Fall musste ich zuerst die aktualisieren .htaccess Datei im Stammordner meiner Website:

# 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

WordPress macht das automatisch, wenn es Schreibrechte hat. Andernfalls wird es sich beschweren, dass es nicht darauf schreiben kann, und das obige Codebeispiel geben, damit Sie die Datei manuell aktualisieren können .htaccess.

Danach habe ich die bearbeitet apache2.conf Datei. Unter Linux befindet es sich in /etc/apache2/apache2.confwird es einen Abschnitt wie diesen geben:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Veränderung AllowOverride None zu AllowOverride FileInfo.

Führen Sie abschließend die folgenden Befehle aus:

sudo a2enmod rewrite
service apache2 restart

All diese Schritte waren notwendig, um zu funktionieren.

  • AllowOverride FileInfo war mein fehlendes Stück.

    – Stracke

    3. März 2019 um 5:43 Uhr

Ich habe diesen Beitrag auf einer anderen Seite gefunden, der schon vielen Leuten geholfen hat

Ich habe es endlich geschafft, das Problem zu lösen! Die Lösung: Ich habe eine benutzerdefinierte Permalink-Struktur verwendet http://kyl.fi/%category%/%postname%/. Ich entfernte den abschließenden Schrägstrich (dh das letzte /) und voila. Ich bin mir jedoch ziemlich sicher, dass ich zuvor ohne Probleme eine Permalink-Struktur mit dem nachgestellten Schrägstrich verwendet habe, daher bin ich immer noch verwirrt und würde daran interessiert sein, mehr über dieses Problem zu erfahren, wenn jemand eine Erklärung hat.

Alle Standard-Permalinks haben ein abschließendes / darin.

In meinem Fall verwende ich den NGINX-Webbrowser mit meiner WordPress-Installation. Die Lösung besteht darin, den NGINX-Direktiven das folgende Code-Snippet hinzuzufügen:

location / {
try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires max;
log_not_found off;
}

Wenn Sie den hervorragenden (Open-Source-) ISPconfig.org-CPanel-Ersatz verwenden, dann gehen Sie zu Ihrer Sites-Seite, geben Sie auf der Registerkarte Optionen das obige Code-Snippet für NGINX-Direktiven ein. ISPconfig verfügt über eine Funktion zum Hinzufügen allgemeiner Code-Snippets für den schnellen Zugriff auf der Registerkarte Optionen.

Nachdem ich die obige Korrektur vorgenommen hatte, konnte ich alle Permalinks-Optionen von WordPress verwenden.

Dungs Benutzeravatar
Dung

Getestete Arbeitslösung:

in Ihrer Apache2-Konfigurationsdatei zum Beispiel:

/etc/apache2/sites-enabled/000-default.conf oder mysite.conf etc ..

Stellen Sie sicher, dass Sie param gesetzt haben und nicht leer sind: ServerName www.example.com or 123.212.333.111

Stellen Sie außerdem sicher, dass Sie Verzeichnisregeln wie unten festgelegt haben (Ihre Rewrite-Regeln wurden möglicherweise nicht in der .htaccess-Datei wirksam, daher fügen Sie sie hier ein und versuchen herauszufinden, warum .htaccess nicht funktioniert. htaccess funktioniert nicht Apache):

<Directory /var/www/html>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all

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

Benutzeravatar von Amir Goodarzi
Amir Goodarzi

Muss eine 2-Punkte-Prüfung sein: 1. Code zur .htaccess-Datei hinzufügen:

# 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. Und die Berechtigung der .htaccess-Datei muss sein: 644

Benutzeravatar von maxim
Maxime

In Centos 8 und Apache 2.4 schauen Sie in /etc/httpd/conf.d in Ihrer Site-.conf-Datei, fügen Sie AllowOverride All hinzu, Beispiel wie dieses

<Directory /path/to/site>
     #add the following setting to allow .htaccess in your web dir to work
     AllowOverride All

</Directory>

MY 80 LISTEN PORT

    #Listen 80
<VirtualHost *:80>
    DocumentRoot "/var/www/mysite.com"
    ServerName www.mysite.com

    # Other directives here
    

        <Directory "/var/www/mysite.com">
                Options FollowSymLinks
                AllowOverride All
        </Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.mysite.com [OR]
RewriteCond %{SERVER_NAME} =mysite.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

MEIN VIRTUELLER SSL-HOST:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    DocumentRoot "/var/www/mysite.com"
    ServerName www.mysite.com

    # Other directives here
    <Directory "/var/www/mysite.com">
                Options FollowSymLinks
                AllowOverride All
        </Directory>
ServerAlias mysite.com
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/mysite.com/fullchain.pem
SSLCertificateKeyFile /live/mysite.com/privkey.pem
</VirtualHost>
</IfModule>

Starten Sie den Apache-Dienst neu. Überprüfen Sie Ihren .htaccess (auf meiner Seite befindet sich der .htaccess in /var/www/mysite.com My .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^helloWorld/?$ /index.php [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

siehe helloWorld Rewrite-Regel. Wenn Sie url aufrufen www.mysite.com/helloWorld und der Browser zeigt Ihre Homepage, die Konfiguration funktioniert und der Permalink-Pfad zur Site funktioniert.

1402170cookie-checkHTTP 404 mit Post-Namen-Permalink

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy