Seite 1 von 2

mod_rewrite funktioniert nicht - Wo ist der Fehler?

Verfasst: 28.02.2014, 17:42
von Andreas 2012
Hallo alle zusammen,

um evtl. Fehler auszuschließen, habe ich mir durch einen Online-Generator die RewriteRule schreiben lassen. Es klappt trotzdem nicht, obwohl mod_rewrite aktiviert ist.
Ich möchte gern eine dynamische URL in eine statische umwandeln.
Aus: https://www.meinehomepage.de/ergebnis/?id=500/
soll werden: https://www.meinehomepage.de/ergebnis/id500/

Der Generator lieferte folgendes:
RewriteEngine On
RewriteRule ^ergebnis/id([^/]*)$ /ergebnis/?id=$1 [L]

Wenn ich nun testweise als Browser-Adresse https://www.meinehomepage.de/ergebnis/id500/ eingebe, kommt immer die Meldung, dass die Seite nicht existiert.
Woran könnte es liegen?

Vielen Dank im voraus!!!

Gruß, Andreas

Verfasst:
von

Verfasst: 01.03.2014, 09:00
von Seo.gy
Hallo,

versuch mal:
RewriteRule ^ergebns/id(.*) $ /ergebnis/?id=$1 [L]

Verfasst: 01.03.2014, 11:38
von Andreas 2012
Hallo Jürgen, danke für deine Antwort.

Leider funktioniert das auch nicht (obwohl ich den Wortzwischenraum vor dem $ rausgenommen habe) :(

Gruß, Andreas

Verfasst: 02.03.2014, 14:35
von elmex

Code: Alles auswählen

RewriteRule ^ergebnis/id([^/]*)$ /ergebnis/index.php?id=$1 [L]
Oder wie eben das gewünschte Script bei Dir benannt ist...

Diese "automatische Ergänzung" funktioniert meiner Meinung nach mit Rewrite nämlich nicht...

Verfasst: 02.03.2014, 16:01
von Andreas 2012
Danke elmex. Hab deine Anmerkung jedoch nicht ganz verstanden. Und in dem genannten Code steht index.php, was so nicht existiert.

Gruß, Andreas

Verfasst:
von

Verfasst: 02.03.2014, 16:58
von elmex
Nein, es gibt nicht "/ergebnis/?id=xxx" sondern da fehlt eben genau der Dateiname des Scriptes. Üblicherweise nimmt man dafür "index.xxx", wie es bei Dir bezeichnet ist, musst du eben selber wissen. Während Webserver das oft automatisch ergänzen, muss man das bei Rewrite schon explizit nennen.

Verfasst: 03.03.2014, 08:29
von Andreas 2012
Der Dateiname heißt ja "ergebnis". Das ganze läuft unter Wordpress, also ohne Dateiendungen. /ergebnis/ sieht zwar nach Verzeichnis aus, ist aber eben die Datei "ergebnis", nur dass Wordpress dann noch den Slash dahintersetzt, und dann erst das Fragezeichen.

Gruß, Andreas

Re: mod_rewrite funktioniert nicht - Wo ist der Fehler?

Verfasst: 03.03.2014, 09:59
von Kristian
Andreas 2012 hat geschrieben: Aus: https://www.meinehomepage.de/ergebnis/?id=500/
soll werden: https://www.meinehomepage.de/ergebnis/id500/

Code: Alles auswählen

RewriteRule ^ergebnis/id([^/]*)/$ /ergebnis/?id=$1/ [L] 

Verfasst: 03.03.2014, 14:17
von elmex
Andreas 2012 hat geschrieben:Der Dateiname heißt ja "ergebnis". Das ganze läuft unter Wordpress, also ohne Dateiendungen. /ergebnis/ sieht zwar nach Verzeichnis aus, ist aber eben die Datei "ergebnis", nur dass Wordpress dann noch den Slash dahintersetzt, und dann erst das Fragezeichen.

Gruß, Andreas
Tja, na denn. Ist doch klar, da konfrontieren jetzt die Rewrite Rules von Wordpress und die neue. Ausserdem ist der Pfad /ergebnis/ dann ja auch nur virtuell....

Sollte man schon dazusagen, wenn man Hilfe sucht ;)

Vielleicht postest du mal Deine gesamte .htaccess, damit man dir helfen kann.

Verfasst: 03.03.2014, 15:11
von Andreas 2012
Sorry, wenn ich mich unklar ausgedrückt habe!

@Kristian: funktioniert leider nach wie vor nicht.

@elmex: Hier mal der Inhalt der htaccess-Datei. Hatte auch schon versucht, die besagte Zeile ganz unten zu platzieren, hat auch nichts gebracht.

Danke im voraus!!!

-------------------------------------------------------------------------------

ServerSignature Off

# Enable the next 2 commands one at a time - only once .htaccess is working correctly on server

# SQL Inject protection - Can cause 500 Internal Server Error
#Options +FollowSymLinks

# Disable directory browsing - Can cause 500 Internal Server Error
#Options All -Indexes

RewriteEngine On
RewriteRule ^ergebnis/id([^/]*)/$ /ergebnis/?id=$1/ [L]


## Good SEO - non-www to www redirect - enable this and add your site domain name
#<IfModule mod_rewrite.c>
# RewriteCond %{HTTPS} !=on
# RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
# RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#</IfModule>

## Deny access to protected server files - .htaccess, .htpasswd and all file names starting with dot
RedirectMatch 403 /\..*$

## Protect sensitive files from client-side viewing.
<FilesMatch "^(wp-config\.php|php\.ini|php5\.ini|php\.info|readme\.html|bb-config\.php|htaccess|readme\.txt|error_log|error\.log|PHP_errors\.log|\.svn)">
Deny from all
</FilesMatch>


## The TRACE, DELETE, TRACK and DEBUG request methods should never be allowed against your website.
RewriteCond %{REQUEST_METHOD} ^(TRACE|DELETE|TRACK|DEBUG) [NC]
RewriteRule ^(.*)$ - [F,L]

# QUERY STRING EXPLOITS

# The libwww-perl User Agent is forbidden - Many bad bots use libwww-perl modules, but some good bots use it too.
# Good sites such as W3C use it for their W3C-LinkChecker.
# Add or remove user agents temporarily or permanently from the first User Agent filter below.
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader|jce|wbsearchbot) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner|jce) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D|\\r|\\n) [NC,OR]
RewriteCond %{REQUEST_URI} owssvr\.dll [NC,OR]
RewriteCond %{HTTP_REFERER} (%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_REFERER} \.opendirviewer\. [NC,OR]
RewriteCond %{HTTP_REFERER} users\.skynet\.be.* [NC,OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*embed.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^e]*e)+mbed.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*object.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^o]*o)+bject.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]

# Removed [ ] for joomla etc.

RewriteCond %{QUERY_STRING} ^.*(\(|\)|<|>|%3c|%3e).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\x00|\x04|\x08|\x0d|\x1b|\x20|\x3c|\x3e|\x7f).* [NC,OR]

RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\./|\../|\.../)+(motd|etc|bin) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1|mosconfig|scanner) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|%00|%2527) [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
RewriteRule ^(.*)$ - [F,L]



<IfModule mod_deflate.c>
<FilesMatch "\.(js|css)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>



# BEGIN WPSuperCache
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#If you serve pages from behind a proxy you may want to change 'RewriteCond %{HTTPS} on' to something more sensible
AddDefaultCharset UTF-8
RewriteCond %{REQUEST_URI} !^.*[^/]$
RewriteCond %{REQUEST_URI} !^.*//.*$
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{HTTP:Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{HTTPS} on
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html.gz -f
RewriteRule ^(.*) "/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html.gz" [L]

RewriteCond %{REQUEST_URI} !^.*[^/]$
RewriteCond %{REQUEST_URI} !^.*//.*$
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{HTTP:Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{HTTPS} !on
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html.gz -f
RewriteRule ^(.*) "/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html.gz" [L]

RewriteCond %{REQUEST_URI} !^.*[^/]$
RewriteCond %{REQUEST_URI} !^.*//.*$
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{HTTP:Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{HTTPS} on
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html -f
RewriteRule ^(.*) "/wp-content/cache/supercache/%{SERVER_NAME}/$1/index-https.html" [L]

RewriteCond %{REQUEST_URI} !^.*[^/]$
RewriteCond %{REQUEST_URI} !^.*//.*$
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$
RewriteCond %{HTTP:X-Wap-Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{HTTP:Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{HTTPS} !on
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html -f
RewriteRule ^(.*) "/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html" [L]
</IfModule>

# END WPSuperCache



# 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

Verfasst: 03.03.2014, 16:38
von Kristian
Andreas 2012 hat geschrieben:Sorry, wenn ich mich unklar ausgedrückt habe!
@Kristian: funktioniert leider nach wie vor nicht.
Ok, lass uns der Sache mal auf den Grund gehen ;-)
Prüfe bitte, ob diese Aussage stimmt:

Code: Alles auswählen

http&#58;//www.meinehomepage.de/ergebnis/?id=500/ 
Der Slash am Ende kommt mir sehr eigen vor.

EDIT:
Bitte setze Code, wie den der .htacces, künftig in die Code-Tags des Forums, dann wird es leserlicher.

Verfasst: 03.03.2014, 16:55
von elmex
@Andreas 2012

uff.... bissel umfangreich Deine htaccess :O

also, das funktioniert nicht, weil du wegen dem [L] am Ende der /ergebnis/ Rule nicht mehr in die normalen Wordpress Regeln kommst. (Und mit der Regel am Ende nicht, weil Du wegen dem [L] nach den Wordpress Rules nicht mehr an die /ergebnis/ Rule kommst).

Versuch mal einfach ohne das [L] bei der /ergebnis/ Rule am Anfang (also wie es jetzt ist, bloss ohne [L]) . Kann aber sein, dass wegen der ganzen anderen Regeln trotzdem schief geht...

Verfasst: 03.03.2014, 17:26
von Andreas 2012
@Kristian: Werde das nächste mal als Code-Tag posten :wink:
Der Code stimmt aber so, wie du ihn zitiert hast. So kann ich die Seite problemlos aufrufen. In dem Moment, wo ich die Adresszeile ändere und das ? sowie das ? entferne, findet er die Seite nicht mehr.

@elmex: Wie du schon vermutet hast, auch ohne das [L] geht trotzdem nichts :cry:

Gruß, Andreas

Verfasst: 03.03.2014, 17:39
von elmex
Tja, schade! An der Stelle muss ich dann auch passen... würde mich in der Situation auch nur mit "try+error" durchprobieren können und das ist übers Forum dann unmachbar...

Trotzdem viel Erfolg!

Verfasst: 03.03.2014, 17:42
von Kristian
elmex hat geschrieben:@Andreas 2012

uff.... bissel umfangreich Deine htaccess :O

also, das funktioniert nicht, weil du wegen dem [L] am Ende der /ergebnis/ Rule nicht mehr in die normalen Wordpress Regeln kommst. (Und mit der Regel am Ende nicht, weil Du wegen dem [L] nach den Wordpress Rules nicht mehr an die /ergebnis/ Rule kommst).

Versuch mal einfach ohne das [L] bei der /ergebnis/ Rule am Anfang (also wie es jetzt ist, bloss ohne [L]) . Kann aber sein, dass wegen der ganzen anderen Regeln trotzdem schief geht...
@elmex,
es sind verschiedene Rewrite-Blöcke.
Das Verhalten diesbezüglich oder auch nur in Bezug auf das "L" kann man in der Doku nachlesen, mehrere Blöcke werden aber anders gehandelt. Hmmm, mein Kopf gibt das heute nicht mehr her, ich musste mit den PHP-Leuten reden und das war anstrengend.
(bei umfangreich stimme ich aber auch zu)