web-dev-qa-db-ger.com

Rewrite-Regeln funktionieren in WordPress nicht

Ich versuche, die neuen Überschreibungsregeln mit der Überschreibungs-API hinzuzufügen:

 add_rewrite_rule('product/([A-Z0-9]{10})', 'index.php/product/?asin=$1', 'bottom');
 add_rewrite_rule('product/(([A-Za-z0-9_])*)', 'index.php/product/?product=$1', 'bottom');
 add_rewrite_rule('compare/((([A-Z0-9]{10}),?)*)', 'index.php/compare/?asin=$1', 'bottom');
 add_rewrite_rule('categories/(([A-Za-z0-9]|\-|\_)*)', 'index.php/categories/?subcategory=$1', 'bottom');

Nachdem der Permalink aktualisiert wurde, werden der .htaccess-Datei die folgenden Zeilen hinzugefügt:

RewriteRule ^product/([A-Z0-9]{10}) /index.php/product/?asin=$1 [QSA,L]
RewriteRule ^product/(([A-Za-z0-9_])*) /index.php/product/?product=$1 [QSA,L]
RewriteRule ^compare/((([A-Z0-9]{10}),?)*) /index.php/compare/?asin=$1 [QSA,L]
RewriteRule ^categories/(([A-Za-z0-9]|\-|\_)*) /index.php/categories/?subcategory=$1 [QSA,L]

daraus ergibt sich die folgende .htaccess Datei:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^product/([A-Z0-9]{10}) /index.php/product/?asin=$1 [QSA,L]
RewriteRule ^product/(([A-Za-z0-9_])*) /index.php/product/?product=$1 [QSA,L]
RewriteRule ^compare/((([A-Z0-9]{10}),?)*) /index.php/compare/?asin=$1 [QSA,L]
RewriteRule ^categories/(([A-Za-z0-9]|\-|\_)*) /index.php/categories/?subcategory=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Aber als ich versuchte, auf die folgende URL zuzugreifen:

http://example.com/product/ABCDE324AB

Es scheint nicht zu funktionieren. Ich erhalte immer eine Seite nicht gefundene Seite. Irgendwelche Ideen?

4
soul

Ich verstehe aus den obigen Ausführungen, dass Sie eine .htaccess-Datei und auch korrekten Code haben, der in dieselbe Datei geschrieben ist, aber immer noch das 404-Problem hat. Lass mich dir sagen warum. Ihr Server erlaubt der .htaccess-Datei nicht, die Berechtigung zu lesen oder zu überschreiben. Wie können Sie diese Erlaubnis geben? Öffnen Sie Ihre Apache httpd.conf-Datei serch für AllowOverride, jetzt können Sie sehen, dass sie mehrmals vorhanden ist. Überprüfe, ob der folgende Kommentar in derselben Datei enthalten ist:

# AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None

Ersetzen Sie einfach AllowOverride None durch AllowOverride All

Starten Sie nun Apache neu und es sollte funktionieren

5
Manish