Zum Inhalt springen

CoolURI geht nur auf erster Ebene?!

Erstellt am 17. September 2008 · 4 Antworten · letzte Antwort am 27. April 2010

Tags: URLs & Routing, Frage

Eazy ·

Moin,

Der coole URI ist ja echt ein recht cooler (und vorallem simpler?) Zeitgenosse, kommt bei mir aber leider nicht klar:

Habe Tutorial von http://blog.undkonsorten.com/cooluri-real-url-seiten-ausblenden-seo durchgemacht. Habe dabei die Standard-XML-Konfigdatei von CoolURI verwendet, ohne die Einstellungen zu verändern. Auch habe ich die .htaccess von o.g. Tutorial verwendet, welche wie folgt lautet:

RewriteEngine On
RewriteRule ^/(typo3|typo3temp|typo3conf|t3lib|tslib|fileadmin|uploads|showpic\.php)$ - [L]
RewriteRule ^/(typo3|typo3temp|typo3conf|t3lib|tslib|fileadmin|uploads|showpic\.php)/.*$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L] 

RewriteBase /

Ich kann den Root-Pfad (http://server/), sowie die erste Ebene (also bspw. http://server/about/) öffnen, bzw. über Links dort hingelangen. Klicke ich aber ab der zweiten Ebene (also in /about/) auf einen Link, der auf bspw. /about/mich/) verweist, so kriege ich eine Typo3-Fehlermeldung namens "Error! Reason: "about/mich/" could not be found, closest page matching is about/".

Wat mach ich falsch? Mach ich wat falsch?

Habe zur Entwicklung übrigens XAMPP im Einsatz, wo ich allein im httpd.conf die Zeile "LoadModule rewrite_module modules/mod_rewrite.so" de-kommentiert habe (also die Raute raus, damit aktiviert wird) geändert habe.

Danke für eure Hilfe!

Eazy

marcfinnern ·

hi,
da ich den gleichen Fehler hatte wie du..
hier mal meine CoolUri XML

<?xml version="1.0" encoding="utf-8"?>
<cooluri>
  <cooluris>1</cooluris>
  <cache>
    <usecache>1</usecache>
    <params2cool>
      <checkforchangeevery>0</checkforchangeevery>
    </params2cool>
    <cool2params>
      <translateifnotfound>0</translateifnotfound>
      <oldlinksvalidfor>365</oldlinksvalidfor>
    </cool2params>
    <cacheparams>0</cacheparams>
      <pagenotfound>
      <status>HTTP/1.0 301 Moved Permanently</status>
    <behavior type="redirect">page-not-found.html</behavior>        
    </pagenotfound>
  </cache>

    <pagepath>
    <table>pages</table>
    <id>uid</id>
    <title>subtitle,title</title>
    <connection>pid</connection>
    <additionalWhere><![CDATA[ AND is_siteroot<>1 ]]></additionalWhere>
    <start>
      <param>pid</param>
      <value>0</value>
    </start>
    <idconstraint>
      <match>^[0-9]+$</match>
    </idconstraint>
    
    <saveto>id</saveto>
    <default>0</default>
        
    <allparamconstraints> <!-- constraint -->
      <type>int</type>
      <compare>gt</compare>
      <value>0</value>
    </allparamconstraints>
    
    <userfunc>tx_cooluri->getPageTitle</userfunc>
    <urlize>1</urlize>

  </pagepath>
 
  <uriparts>
  <part>
     <parameter>param[key]</parameter>
     <lookindb>
       <to>SELECT title FROM table WHERE uid=$1</to>
       <urlize>1</urlize>
     </lookindb>
  </part> 
  
  
    <part>
      <parameter>tx_ttnews[tt_news]</parameter>
      <lookindb>
        <to>SELECT title FROM tt_news WHERE uid=$1</to>
        <!-- if you have news items in different languages in one folder, use this sql -->
        <!-- to>SELECT title FROM tt_news WHERE (uid=$1 or l18n_parent=$1) AND sys_language_uid={L=0}</to -->
        <translatetoif>
          <match>^[0-9]+$</match>
        </translatetoif>
	<urlize>1</urlize>
        <t3conv>1</t3conv>
      </lookindb>
    </part>
    <part>
      <parameter>tx_eeblog[showUid]</parameter>
      <lookindb>
        <to>SELECT subject FROM tx_eeblog_maintable WHERE uid=$1</to>
        <translatetoif>
          <match>^[0-9]+$</match>
        </translatetoif>
        <t3conv>1</t3conv>
      </lookindb>
    </part>
  </uriparts>
    
  <predefinedparts>
    <part>
      <parameter>tx_ttnews[backPid]</parameter>
    </part>
    <part>
      <parameter>cHash</parameter>
    </part>
    <part>
      <parameter>tx_eeblog[pointer]</parameter>
    </part>
    <part>
      <parameter>tx_eeblog[backPID]</parameter>
    </part>
    <part>
      <parameter>no_cache</parameter>
    </part>
  </predefinedparts>
  
  <valuemaps>
    <valuemap>
      <parameter>L</parameter>
      <value key="">0</value>
      <value key="en">1</value>
    </valuemap>
  </valuemaps>
  
  <paramorder>
    <param>L</param>
  </paramorder>
     <removetrailingslash>0</removetrailingslash>
</cooluri>

<removetrailingslash>0</removetrailingslash> // Sorgt das am ende kein / entfernt wird!! könnte nämlich wie bei mir sein, das dein server das nicht zu lässt...

well done

marc

InforMedic ·

bei mir macht nur Rewrite Base / ein Problem -> darf also nicht in die .htaccess

Ansonsten debugging:

  • - mit phpinfo() prüfen ob auch wirklich php>5.1.x mit simpleXML installiert ist
    - prüfen ob die DB Tabelle "link_cache" gefüllt ist
    - wenn nicht im CoolUri Modul im BE mittels "delete and force update to all links" füllen
    - BE/FE/Browser Cache löschen
    - Seite aktualisieren
    - Links auf Seite überprüfen

Meine Funktionierende cooluri.xml ist ein Merge der standard xml datei sowie der xml Datei aus der CoolUri Doku (Google Doks) und sieht wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>
<cooluri>
  <urlsuffix>.html</urlsuffix>
  <removetrailingslash>1</removetrailingslash>
  <cooluris>1</cooluris>
  
  <cache>
    <usecache>1</usecache>
    <params2cool>
      <checkforchangeevery>1</checkforchangeevery>
    </params2cool>
    <cool2params>
      <translateifnotfound>0</translateifnotfound>
      <oldlinksvalidfor>365</oldlinksvalidfor>
    </cool2params>
    <cacheparams>0</cacheparams>
    <pagenotfound>
      <status>HTTP/1.0 301 Moved Permanently</status>
      <behavior type="redirect">page-not-found.html</behavior>       
    </pagenotfound>
  </cache>

  <pagepath>
    <table>pages</table>
    <id>uid</id>
    <title>tx_realurl_pathsegment,title,subtitle,alias</title>
    <connection>pid</connection>
    <additionalWhere><![CDATA[ AND is_siteroot<>1 ]]></additionalWhere>
    <start>
      <param>pid</param>
      <value>0</value>
    </start>
    <idconstraint>
      <match>^[0-9]+$</match>
    </idconstraint>
    
    <saveto>id</saveto>
    <default>0</default>
       
    <allparamconstraints> <!-- constraint -->
      <type>int</type>
      <compare>gt</compare>
      <value>0</value>
    </allparamconstraints>
        
    <userfunc>tx_cooluri-&gt;getPageTitle</userfunc>
    <urlize>1</urlize>
    <t3conv>1</t3conv>
  </pagepath>
  
  <removeparts>
    <part>fileadmin</part>
    <part>typo3</part>
    <part>typo3conf</part>
    <part>typo3temp</part>
   </removeparts>

  <uriparts>
  <part>
     <parameter>param[key]</parameter>
     <lookindb>
       <to>SELECT title FROM table WHERE uid=</to>
       <urlize>1</urlize>
     </lookindb>
  </part>
  
    <part>
      <parameter>tx_ttnews[tt_news]</parameter>
      <lookindb>
        <to>SELECT title FROM tt_news WHERE uid=$1</to>
        <!-- if you have news items in different languages in one folder, use this sql -->
        <!-- to>SELECT title FROM tt_news WHERE (uid= or l18n_parent=) AND sys_language_uid={L=0}</to -->
        <translatetoif>
          <match>^[0-9]+$</match>
        </translatetoif>
        <urlize>1</urlize>
        <t3conv>1</t3conv>
      </lookindb>
    </part>
    <part>
      <parameter>tx_eeblog[showUid]</parameter>
      <lookindb>
        <to>SELECT subject FROM tx_eeblog_maintable WHERE uid=$1</to>
        <translatetoif>
          <match>^[0-9]+$</match>
        </translatetoif>
        <t3conv>1</t3conv>
      </lookindb>
    </part>
  </uriparts>
    
  <predefinedparts>
    <part>
      <parameter>tx_ttnews[backPid]</parameter>
    </part>
    <part>
      <parameter>cHash</parameter>
    </part>
    <part>
      <parameter>tx_eeblog[pointer]</parameter>
    </part>
    <part>
      <parameter>tx_eeblog[backPID]</parameter>
    </part>
    <part>
      <parameter>no_cache</parameter>
    </part>
  </predefinedparts>
  
  <valuemaps>
    <valuemap>
      <parameter>L</parameter>
      <value key="">0</value>
      <value key="de">1</value>
      <value key="es">2</value>
    </valuemap>
  </valuemaps>
  
  <paramorder>
    <param>L</param>
  </paramorder>
  
</cooluri>

gruß
Info

ores ·

ich hatte das selbe problem mit der ersten ebene in realurl.
Lösung war: RewriteBase/ Pfad anpassen!

Unbekannter Benutzer ·

Also ich hatte dieses Problem mit mehreren Menüebenen ebenfalls.

Meine Konfig sah vor, ohne endenden "/" und dafür mit Endung .html
Bei mir kam auch nicht die von mir in CoolURI konfigurierte 404-Seite bei einem Aufruf in einer unteren Ebene, sondern die 404-Seite des Providers. Also lags somit an der .htaccess. Hier dazu nun meine jetzt funktionierende Konfiguration:

.htaccess (kann sein das einige die Zeile "RewriteBase /" rausnehmen müssen):


RewriteEngine On
RewriteBase /
RewriteRule ^/(typo3|typo3temp|typo3conf|t3lib|tslib|fileadmin|uploads|showpic\.php)$ - [L]
RewriteRule ^/(typo3|typo3temp|typo3conf|t3lib|tslib|fileadmin|uploads|showpic\.php)/.*$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php

und meine CoolUriConf.xml:

<?xml version="1.0" encoding="utf-8"?>
<cooluri>

<cache>
<usecache>1</usecache><!-- READONLY -->
<params2cool>
<!-- how often (in days) should be links updated (Typo3 cache needs to be cleared) -->
<checkforchangeevery>1</checkforchangeevery>
</params2cool>
<cool2params>
<!-- how many days should old links (those that are redirected to existing) should be kept active -->
<oldlinksvalidfor>365</oldlinksvalidfor>
</cool2params>

<pagenotfound>
<!-- the status has to meet HTTP protocol header -->
<status>HTTP/1.0 301 Moved Permanently</status>
<behavior type="redirect"><![CDATA[404.html]]></behavior>
<!-- possible @type values:
page - will show a file (loaded using file_get_contents)
redirect - will redirect to a certaing URL
message - will output a message
-->
</pagenotfound>
<pagenotfound>
<status>HTTP/1.0 200 OK</status>
<behavior type="redirect"><![CDATA[/]]></behavior>
</pagenotfound>
</cache>

<pagepath>
<!-- first non-empty value will be used -->
<title>tx_realurl_pathsegment,alias,subtitle,title</title>

<saveto>id</saveto><!-- READONLY -->
<default>0</default><!-- READONLY -->

<userfunc>tx_cooluri->getPageTitle</userfunc>
<t3conv>1</t3conv>
</pagepath>

<uriparts>
<part>
<parameter>tx_ttnews[tt_news]</parameter>
<lookindb>
<to>SELECT title FROM tt_news WHERE uid=$1</to>
<!-- if you have news items in different languages in one folder, use this sql -->
<!-- to>SELECT title FROM tt_news WHERE (uid=$1 or l18n_parent=$1) AND sys_language_uid={L=0}</to -->
<t3conv>1</t3conv>
</lookindb>
</part>
<part>
<parameter>tx_eeblog[showUid]</parameter>
<lookindb>
<to>SELECT subject FROM tx_eeblog_maintable WHERE uid=$1</to>
<t3conv>1</t3conv>
</lookindb>
</part>
<!-- you can move cHash to predefineparts to remove in from URL
but first read the manual -->
<part>
<parameter>cHash</parameter>
</part>

<!-- common patterns -->

<!-- this will just add this parameter value to URL -->
<part>
<parameter>paramA</parameter>
</part>
<!-- this will look up parameter value in the database table "sometable" and if found
the value will be transformed using Typo3 csconv into URL-like value.
You can make all sorts of MySQL stuff here, such as add UID into the result:
SELECT CONCAT(title,'-',uid) FROM ...
-->
<part>
<parameter>paramB</parameter>
<lookindb>
<to>SELECT title FROM sometable WHERE uid=$1</to>
<t3conv>1</t3conv>
</lookindb>
</part>
</uriparts>

<predefinedparts>
<part>
<parameter>no_cache</parameter>
</part>

<!-- common patterns -->

<!-- parts defined this way will be removed from URL -->
<part>
<parameter>paramC</parameter>
</part>
<!-- this will prefix a value with "prefix-". Cannot be localized.
-->
<part key="prefix-(.*)" regexp="1">
<parameter>paramD</parameter>
</part>
<!-- if parameter matches value, key will be added to URL
with mutliple values, use valuemaps
-->
<part key="thisWillAppearInUrl">
<parameter>paramE</parameter>
<value>ifParamEMatcesThisValue</value>
</part>
</predefinedparts>

<valuemaps>
<valuemap>
<parameter>L</parameter>
<!-- L is empty of 0, result is empty -->
<value key="">0</value>
<!-- L is 1, result is "en" -->
<value key="en">1</value>
</valuemap>
</valuemaps>

<!-- this will put L param to the first position
for more magic see manual -->
<paramorder>
<param>L</param>
</paramorder>

<!-- READONLY START -->
<cooluris>1</cooluris>

<urlsuffix>.html</urlsuffix>
<removetrailingslash>1</removetrailingslash>

</cooluri>

Hoffe geholfen zu haben,
Huaba

PS: sorry, irgendwie klappte die richtige Formatierung nicht...