[mod_rewrite] weiterleitung auf die richtige URL Frage [mod_rewrite] weiterleitung auf die richtige URL zu Favoriten hinzufügen

Daumen hoch 0 Daumen runter

Hallo, mein CMS produziert merkwürdige URLs - die ins nirvana führen. 

Ein Beispiel: domain.com/category/mein-artikel-ganz-toll/forward/234552

Das Problem dabei, das die URL wirklich existiert, wenn das forward/234552 weg genommen wird kann der Artikel ganz normal aufgerufen werden. 

Da ich den Fehler im CMS einfach nicht finde, würde ich mich über eine Lösung mit .htaccess freuen. Sprich das "forward/234552 sollte nicht beachtet werden, falls ihr versteht was ich damit meine

Optimalerweise sollte es eine 301er Rule werden.

Antworten


Diese Antwort als GUT bewerten 1 Diese Antwort als SCHLECHT bewerten

Hallo,

generell wäre es natürlich cooler wenn dein CMS die richtigen URLs erzeugt ;)

Mit dem mod_rewrite könnte es vllt so funktionieren (via askapache.com):

RewriteRule ^(.*)forward/\d+$ $1 [R=301,L]

Die Regel sollte aus dem:

domain.com/category/mein-artikel-ganz-toll/forward/234552

das machen:

domain.com/category/mein-artikel-ganz-toll/

 

Diese Antwort als GUT bewerten 0 Diese Antwort als SCHLECHT bewerten

Danke Tim, nur funktioniert das leider nicht. Die Seite bleibt weiterhin einfach weiß :(

Das sieht eigentlich ganz gut aus, was tim da gepostet hat. Die Regel sollte eigentlich funktionieren. Was für einen http-Statuscode erzeugt deine "weiße Seite" denn? Poste vielleicht mal deine .htaccess hier...

Jan am 03.09.2012

Hm, komisch. Könnte vielleicht noch was mit deiner RewriteBase oder anderen Regeln zu tun haben?! Am besten echt mal die .htaccess posten.

tim am 03.09.2012

Das klingt eher danach, als ob das Modul für RewriteRule nicht geladen ist, und der Server eine weiße Seite ausspuckt weil er mit der Anweisung nicht anzufangen weiß. Das Apache Errorlog sollte in diesem Fall weiterhelfen.

thorsten am 03.09.2012

kann den Inhalt der .htaccess hier nicht posten - das System hier "frisst" es auf :(

narc am 03.09.2012

@narc: Als neue Antwort und als "Code" formatiert? Das sollte gehen.

Jan am 03.09.2012

@narc - Da ist deine Antwort mit dem Inhalt der .htaccess, ist leider im Spam-Filter gelandet.

martin am 03.09.2012
Diese Antwort als GUT bewerten 0 Diese Antwort als SCHLECHT bewerten

Hmm, 

anbei meine .htaccess - bitte freundlich behandeln :)

 

<Files .htaccess>
	order allow,deny
	deny from all
</Files>

AddDefaultCharset UTF-8
php_flag register_globals off
Options +Indexes +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.domain\.de$ [NC] 
RewriteRule ^(.*)$ http://www.domain.de/$1 [L,R=301] 
RewriteRule ^category/(.+)$ http://www.domain.de/$1 [R=301,L] 

ErrorDocument 404 /www/htdocs/w43576753/404error/
RewriteRule ^(cgi-bin|docs|pdf) - [L]

RewriteRule ^admin/?$ admin_index.php [L]
RewriteRule ^admin/([a-zA-Z0-9_-]+)/?$ admin_index.php?page=$1 [L]
RewriteRule ^admin/plugin/([a-zA-Z0-9_-]+)/?$ admin_index.php?page=plugin_settings&plugin=$1 [L]

RewriteRule \.(css|php|png|jpg|gif|pdf|ico|js|inc|txt|gz|xml|html|eot|otf|ttf|woff)$ - [NC,L]
RewriteRule ^([^/]*)/?$ index.php?page=$1 [L]
RewriteRule ^([^/]*)/([^/]*)/?$ index.php?$1=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ index.php?page=$1&$2=$3 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ index.php?$1=$2&$3=$4 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ index.php?page=$1&$2=$3&$4=$5 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ index.php?$1=$2&$3=$4&$5=$6 [L]

<IfModule mod_gzip.c>
   mod_gzip_on yes
   mod_gzip_static_suffix .gz
   mod_gzip_can_negotiate yes
   AddEncoding gzip .gz
   mod_gzip_update_static no
   mod_gzip_item_include file \.(html|php|rss)$
   mod_gzip_item_exclude file \.(css|js|exe)$
   mod_gzip_item_exclude mime ^image/.*
   mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
   mod_gzip_dechunk yes
 </IfModule>

<IfModule mod_deflate.c>
  <FilesMatch "\.(css|js|xhtml|html|htm|php)$">
	SetOutputFilter DEFLATE
	AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE application/x-shockwave-flash
  </FilesMatch>
</IfModule>

<IfModule mod_expires.c>
    # turn on the module for this directory
    ExpiresActive on
    # set default
    ExpiresDefault "access plus 24 hours"
    ExpiresByType image/jpg "access plus 1 months"
    ExpiresByType image/gif "access plus 1 months"
    ExpiresByType image/jpeg "access plus 1 months"
    ExpiresByType image/png "access plus 1 months"
    ExpiresByType text/css "access plus 1 months"
    ExpiresByType text/javascript "access plus 1 months"
    ExpiresByType application/javascript "access plus 1 months"
    ExpiresByType application/x-shockwave-flash "access plus 1 months"
</IfModule>

<IfModule mod_headers.c>
  <FilesMatch "\\.(eot|svg|svgz|ttf|woff|ico|jpeg|jpg|png|gif|swf)$">
	Header set Cache-Control "max-age=4592000, public"
	Header set Last-Modified "Mon, 03 Jan 2012 00:00:00 GMT"
  </FilesMatch>
  <FilesMatch "\\.(css)$">
	Header set Cache-Control "max-age=604800, public"
	Header set Last-Modified "Mon, 03 Jan 2012 00:00:00 GMT"
  </FilesMatch>
  <FilesMatch "\\.(js)$">
	Header set Cache-Control "max-age=4592000, private"
	Header set Last-Modified "Mon, 03 Jan 2012 00:00:00 GMT"
  </FilesMatch>
  <FilesMatch "\\.(xhtml|html|htm|php)$">
	Header set Cache-Control "max-age=600, private, must-revalidate"
	Header set Last-Modified "Mon, 09 Apr 2012 00:00:00 GMT"
  </FilesMatch>
</IfModule>

<IfModule mod_headers.c>
  Header unset ETag
</IfModule>
FileETag None

<IfModule mod_headers.c>
  Header unset Last-Modified
</IfModule>

Kannst du uns bitte noch mitteilen welche Module im Apache lädst?

thorsten am 03.09.2012
Diese Antwort als GUT bewerten 0 Diese Antwort als SCHLECHT bewerten

Da du ja so einige mod_rewrite-Rules nutzt, sollte es mit dieser eigentlich kein Problem geben.

Versuch es doch mal alternativ mit dieser hier, das sollte dasselbe bewirken:

RewriteRule ^(.*)forward/([0-9]+)$ $1 [R=301,L]

 

Am besten direkt nach der Definition deiner Standard-Domain einfügen.
Evtl. musst du auch, wie bereits bei den "category"-Redirects die ganze URL nutzen: 

RewriteRule ^(.*)forward/([0-9]+)$ http://www.domain.de/$1 [R=301,L]

 

Kommt weiterhin ein weißer Screen, dann nenne uns doch bitte mal den http-Statuscode der produziert wird.

 

Diese Antwort als GUT bewerten 0 Diese Antwort als SCHLECHT bewerten

Danke Jan, 

merkwürdig. Auch dies funktioniert nicht - einen Statuscode gibts es auch nicht. 

Habe die URL nun mit einem Statustool geprüft, dabei kommt folgendes raus:

 

#1 Server Response: http://www.domain.de/category/mein-artikel/forward/312/
HTTP/1.1 302 Found Date: Tue, 04 Sep 2012 10:44:35 GMT Server: Apache X-Powered-By: PHP/5.3.13-nmm1 Set-Cookie: PHPSESSID=87f760cbb30a483065f90a437b777e94; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: max-age=600, private, must-revalidate Pragma: no-cache Location: http:// Vary: Accept-Encoding Last-Modified: Mon, 09 Apr 2012 00:00:00 GMT Content-Type: text/html; charset=UTF-8

Ein Redirect findet schon mal statt, nur kein 301 und die URL ("Location: http://") stimmt auch nicht. Es scheint fast so, als würde dein CMS da eingreifen und den Redirect auslösen ... die RewriteRule ist es zumindest nicht. Ansonsten ist es jetzt mehr als schwierig als Außenstehender zu sagen, woran es liegt ... sorry.

Jan am 04.09.2012

Ok, Danke dir dennoch Jan für die Mühe. Sollte ich es "hin bekommen" - werde ich mich melden :)

narc am 04.09.2012

Mach das, bin gespannt!

Jan am 05.09.2012

Deine Antwort

Registrierter User Bereits registriert? Bitte logge dich vor dem Antworten ein.

Deine Daten