Veröffentlichungsdatum: 01. April 2016
Änderungsdatum: 09. Juli 2019
Dieser Artikel beschreibt, wie Sie dafür sorgen, dass eine Seite nicht gleichzeitig über den reinen Verzeichnisaufruf und index.php Aufruf erreichbar ist.
Sie können über eine einfache Regel in der .htaccess Datei des Projektes (z.B. /de/.htaccess) dafür sorgen, dass eine Seite nicht gleichzeitig über z.B. /de/index.php und /de/ aufgerufen werden kann.
Da ein Inhalt nur über eine URL
erreichbar sein sollte, um so Suchmaschinen die Arbeit zu erleichtern,
bietet es sich an, den eigentlichen Dateinamen einer index.php zu
entfernen.
Über eine mod_rewrite Regel wird deshalb jeder index.php Aufruf (via GET) direkt auf das entsprechende Verzeichnis geleitet und die Parameter angehängt. POST-Anfragen hingegen werden von dieser Regel ausgeschlossen. Beachten Sie wegen der GET-Anfragen die Hinweise am Artikelende!
# RewriteEngine aktivieren (on), falls noch nicht erfolgt: RewriteEngine on RewriteBase /IhrProjekt RewriteCond %{REQUEST_URI} \/index\.php$ [NC] ### Weblication Volltextsuche "Weblication-Grid/5.0 (wSearchBot)" ausschliessen: RewriteCond %{HTTP_USER_AGENT} !^Weblication.*(wSearchBot).*$ [NC] RewriteCond %{THE_REQUEST} ^GET RewriteRule ^(.*)index\.php$ /IhrProjekt/$1?%{QUERY_STRING} [R=301,L]
Sofern auch die oberste index.php umgeschrieben werden soll, definieren Sie am besten eine 301-Weiterleitung über eine .htaccess Datei, die direkt unterhalb der Domain liegt (also in DOCUMENT_ROOT):
# oberste /index.php in / umschreiben: Redirect 301 /index.php /
Um die Links in den generierten Seiten auch entsprechend anzupassen, filtern Sie dies über die pre.php Ihres Projektes.
Ab CMS-Version 008.005.002.000 können Sie das Umschreiben der Links in der pre.php des Projektes mit folgender Zeile beeinflussen. Somit werden Links in Navigationen, Google-Sitemap, Canonical Links, etc. auch ohne die index.php Angabe gesetzt. Die Ausgabe wird lediglich für nicht eingeloggte Benutzer umgeschrieben!
$preVars['removeAllIndexPhp'] = true;
Eine individuelle Lösung (z.B. bei älteren CMS-Versionen) kann alternativ zur vorigen preVars-Umsetzung über die pre.php wie folgt aussehen:
// ... // Hier wird das globale Steuerungsskript eingebunden include($_SERVER['DOCUMENT_ROOT'].'/weblication/grid5/default/project/wGlobal/scripts/pre.php'); if(wUserCur::getName() == '' && !wRequest::isSearchBot()){ // index.php wird nur aus Links entfernt, die mit Slash beginnen // und innerhalb der Google-Sitemap (google-sitemap.php) gesetzt sind if(stristr(wRequest::getPath(), 'google-sitemap')){ $preResult = preg_replace("/\/index\.php/", "/", $preResult); } else{ $preResult = preg_replace("/(href=\"\/|action=\"\/)([^\"']*\/)index\.php/", "$1$2", $preResult); } } // ...