2 Stimmen

mod_rewrite für SEO-freundliche URLs

Ich habe ein CMS, das SEO-freundliche URLs verarbeitet, die mit dem CMS erstellt wurden. Also alles, was eine Erweiterung von index.php wie www.url.com/index.php?id=slug wird netterweise geändert in www.url.com/slug .

Ich habe jedoch auch über tausend Seiten, die mit MYSQL-Abfragezeichenfolgen erstellt werden, die nicht mit meinem CMS verbunden sind. Ich habe also:

www.url.com/item.php?id=001234&pg=author-title

die Informationen in id und pg sind erforderlich, um die Seite zu erstellen. Was ich will, sind für diese Seite urls zu sein:

www.url.com/item/001234/author-title.html

Ich habe mir eine Reihe von mod_rewrite-Tutorials angesehen und nach allen Möglichkeiten gesucht, dies zu tun, aber ich kann es nicht zum Laufen bringen.

Hier ist meine .htaccess (beachten Sie, dass einige der Dinge hier von meinem CMS verwendet und generiert werden:

Edit: Okay, basierend auf den bisherigen Antworten habe ich meine .htaccess wie folgt geändert:

# Use PHP5 as default
AddHandler application/x-httpd-php5 .php
AddDefaultCharset UTF-8
# File modified on Dec 5 11:28:31 2011 by server
# For security reasons, mod_php is not used on this server. Use a php.ini file for php directives
# php_value default_charset "UTF-8"

Options -Indexes
Options +FollowSymLinks

# blocks direct access to the XML files - they hold all the data!
<Files ~ "\.xml$">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>
<Files sitemap.xml>
        Order allow,deny
    Allow from all
    Satisfy All
</Files>

RewriteEngine on

# Usually it RewriteBase is just '/', but 
# replace it with your subdirectory path
RewriteBase /

# Usually it RewriteBase is just '/', but 
# replace it with your subdirectory path
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /?([A-Za-z0-9_-]+)/?$ index.php?id=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule  ^/?item/([0-9]+)/([a-zA-Z0-9_]+).html$ item.php?id=$1&pg=$2 [QSA,L]

Edit: Nachdem ich die .htaccess mit dem bisherigen Feedback geändert habe, bringen die umgeschriebenen URLs immer noch nicht die gewünschten Ergebnisse. Ich erhalte immer noch eine 404.

1voto

Knyri Punkte 2919

Ändern Sie

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /?([A-Za-z0-9_-]+)/?$ index.php?id=$1 [QSA,L] #passes to CMS
RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+).html$ item.php?id=$1&pg=$2 [QSA,L] #passes to your stuff

まで

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?item/([a-zA-Z_]+)/([a-zA-Z_]+).html$ item.php?id=$1&pg=$2 [QSA,L]
# conditions need to be repeated
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /?([A-Za-z0-9_-]+)/?$ index.php?id=$1 [QSA,L]

Stellen Sie spezifischere Regeln immer über allgemeinere Regeln.

Und wenn Ihre Artikel-IDs keine Buchstaben enthalten, verwenden Sie:

RewriteRule ^/?item/([0-9]+)/([a-zA-Z_]+).html$ item.php?id=$1&pg=$2 [QSA,L]

0voto

John Lawrence Punkte 2873

Sie müssen Folgendes hinzufügen item am Anfang, um dem Beispiel zu entsprechen, das Sie geben, und nehmen Sie einige Änderungen an Ihren Charakterklassen vor. Versuchen Sie es:

RewriteRule ^item/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\.html$ item.php?id=$1&pg=$2 [QSA,L]

Dies entspricht einer URL der Form item/[Zeichenfolge aus Buchstaben, Zahlen und Unterstrich]/[Zeichenfolge aus Buchstaben, Zahlen und Unterstrich].html

Wenn Ihre IDs nur numerisch sind, können Sie die Buchstaben aus der ersten Zeichenklasse entfernen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X