User Login    
 + Register
  • Main navigation
Login
Username:

Password:

Remember me



Lost Password?

Register now!
Who's Online
88 user(s) are online (8 user(s) are browsing XoopsWiki)

Members: 4
Guests: 84

munky2020, Reintjan, ghia, ybk78, more...
[Main Page]

Dev:Xoops and mod rewrite

From XOOPS Project

Main Page | Recent changes | Edit this page | Page history | Switch to MediaWiki mode

Printable version | Disclaimers | Privacy policy
Category: Development

Note: Translation is needed



To get short URL`s you can use mod_rewrite from Apache Webserver. First create an .htaccess, to allow to rewrite the URL. Datei .htaccess in xoopsroot:

RewriteEngine On

  1. Articles

RewriteRule ^article([1-9][0-9]*).html /modules/news/article.php?storyid=$1

This means the request http://meineurl/article10.html will change to http://meineurl//modules/news/article.php?storyid=10 in include/common.php (Row 226)

   $xoopsRequestUri = xoops_getenv('REQUEST_URI');
   if (!$xoopsRequestUri) {
       $xoopsRequestUri = !xoops_getenv('SCRIPT_NAME') ? getenv('REQUEST_URI') : xoops_getenv('SCRIPT_NAME');
   }

change to:

   // $xoopsRequestUri = xoops_getenv('REQUEST_URI');
   // if (!$xoopsRequestUri) {
   $xoopsRequestUri = !xoops_getenv('SCRIPT_NAME') ? getenv('REQUEST_URI') : xoops_getenv('SCRIPT_NAME');
   // }

Xoops seems to have a problem with the Request URI. But so it works.

Zum Ersetzen der URLs beim Anzeigen verwende ich eine Funktion aus der Smarty Template Engine: register_outputfilter Diese muss in der footer.php eingebaut werden:

In der footer.php kommt zwei mal die Stelle $xoopsTpl->setCaching(0) vor. An diesen Stellen muss folgendes eingebaut werden (Hier inkl der setCaching Funktion)

   $xoopsTpl->xoops_setCaching(0); include XOOPS_ROOT_PATH . '/outfilter.php'; $xoopsTpl->register_outputfilter("x_rewrite_url");

Dies weist die Smarty Template Engine an, die Funktion x_rewrite_url aufzurufen. Das ganze wird klarer, sobald man die Datei outfilter.php sich anschaut:

   <?php
   function x_rewrite_url($tpl_output, &$smarty) {
   $in = array(
   #article
   "/modules\/news\/article.php\?storyid=([1-9][0-9]*)&page=([1-9][0-9]*)/",
   "/modules\/news\/article.php\?storyid=([1-9][0-9]*)/",
   );
   $out = array(
   "article\\1_\\2.html" ,
   "article\\1.html" ,
   );
   $tpl_output = preg_replace($in, $out, $tpl_output);
   return $tpl_output;
   }
   ?>

Grob gesprochen wird mittels des preg_replace Commandos der Teil, der in $in steht durch den in $out ersetzt und per return wieder zurückgegeben.

Wofür nun das alles?

Es geht um die bessere indizierbarkeit durch Searchengines (Stichwort: Search friendly URLs). Manche Searchengines mögen Parameter nicht. Ebenso mögen manche Suchserver die Umlenkung zur Hauptseite nicht.

Nach all den Änderungen kann man seine Xoops Seite mittels article1.html den Artikel mit der Nummer 1 anzeigen.

Fortführend dazu kann man noch die /index.php anpassen. Man könnte, wenn eine Suchmaschine ankommt, gleich eine Artikelübersicht präsentieren ohne den Grafischen Schnickschnack mit den kurzen URLs. Das erleichtert bessere Plazierungen in den Suchservern.

Ein kleines Code Schnippsel dazu, was man in die /index.php Datei einfügen könnte:


   if((ereg("Nav", $_SERVER["HTTP_USER_AGENT"])) ||
   (ereg("Gold", $_SERVER["HTTP_USER_AGENT"])) ||
   (ereg("X11", $_SERVER["HTTP_USER_AGENT"])) ||
   (ereg("Mozilla", $_SERVER["HTTP_USER_AGENT"])) ||
   (ereg("Netscape", $_SERVER["HTTP_USER_AGENT"])) AND
   (!ereg("MSIE", $_SERVER["HTTP_USER_AGENT"])) AND
   (!ereg("Konqueror", $_SERVER["HTTP_USER_AGENT"])))
   $browser = "Netscape";
   // Opera needs to be above MSIE as it pretends to be an MSIE clone


   elseif(ereg("Opera", $_SERVER["HTTP_USER_AGENT"])) $browser = "Opera";
   elseif(ereg("MSIE", $_SERVER["HTTP_USER_AGENT"])) $browser = "MSIE";
   elseif(ereg("Lynx", $_SERVER["HTTP_USER_AGENT"])) $browser = "Lynx";
   elseif(ereg("WebTV", $_SERVER["HTTP_USER_AGENT"])) $browser = "WebTV";
   elseif(ereg("Konqueror", $_SERVER["HTTP_USER_AGENT"])) $browser = "Konqueror";
   elseif((eregi("bot", $_SERVER["HTTP_USER_AGENT"])) || \
   (ereg("Google", $_SERVER["HTTP_USER_AGENT"])) || \
   (ereg("Slurp", $_SERVER["HTTP_USER_AGENT"])) || \
   (ereg("Scooter", $_SERVER["HTTP_USER_AGENT"])) \
   || (eregi("Spider", $_SERVER["HTTP_USER_AGENT"])) \
   || (eregi("Infoseek", $_SERVER["HTTP_USER_AGENT"]))) $browser = "Bot";
   else $browser = "Other";
   // Jetzt steht in $browser entweder der Browser oder "Bot" oder "Other"
   if ($browser == "Bot") {
   echo "Hallo Suchmaschine, hier deine Einträge";
   // Hier kann man dann der Suchmaschine das präsentieren, was man will
   } else { // Hier steht der "alte" Weiterleitungscode
   if ( isset($xoopsConfig['startpage']) && $xoopsConfig['startpage'] !=
   "" && $xoopsConfig['startpage'] != "--" )
   {header('Location: '.XOOPS_URL.'/modules/'.$xoopsConfig['startpage'].'/');
   exit();
   } else {
   $xoopsOption[`show_cblock'] =1;
   include "header.php";
   include "footer.php";
   }
   }



Back to the dev:Main Page

Retrieved from "http://www.xoops.org/modules/mediawiki/index.php/Dev:Xoops_and_mod_rewrite"

This page has been accessed 741 times. This page was last modified 02:05, 16 December 2007. Content is available under XOOPS Project.


Developers for Hire
Developers for Hire
Local Support Sites
Make a donation
Please select an amount to donate


Do you want your username revealed with your donation?
Yes - List me as a Generous Donor
No - List my donation as from an Anonymous Donor


Powered by
XOOPS Code hosted on SourceForge

Powered by PHP

PHP 5

Powered by MySQL

Powered by Smarty

OSI certified

GPL

All content on this site is subject to the Creative Commons License
Top Tags
Theme (5) news (2) security (2) sport (1) Arabic (1) wiki (1) Christmas (1) jQuery (1) tag (1) module (1) SEO (1) comments (1)
Advertisement