Pretty URLs

Started by SMFHacks.com Team, January 31, 2007, 10:56:43 AM

Previous topic - Next topic

hash899

Quote from: Dannii on June 02, 2009, 12:16:30 PM
Looks fine to me. What do you think is wrong with it?

i want it so instead of the album name being http://ieatsoul.com/mgallery/?sa=album;id=56 it will be the actual album name at the end of the link and same goes for the video links. u think thats possible?

Dannii

Possible, yes. Easy, no. I don't have the time to do make the filters required for it. You could, or if you don't have the skills, ask the mod's author. They'll need to change the mod so the items can be accessed by title as well as by number.
"Never imagine yourself not to be otherwise than what it might appear to others that what you were or might have been was not otherwise than what you had been would have appeared to them to be otherwise."

hash899

Quote from: Dannii on June 02, 2009, 12:37:26 PM
Possible, yes. Easy, no. I don't have the time to do make the filters required for it. You could, or if you don't have the skills, ask the mod's author. They'll need to change the mod so the items can be accessed by title as well as by number.

thanks for the reply. I'll ask the mod author and see what he says. thanks for all the help  :)

CruGeR

Hello
i have a small problem with mod... after install on SMF 2.0 RC1-1 (emulation 2.0 rc1) - no errors. my forum works with pretty url-s but don't use any css - style. Only on first page (www."myforum".eu/index.php) is good... prettyurl works perfect but forum looks like....... :)
i don't know wher i have an error

MelfromBoD

hi I moved my forum to another domain and database. But now when trying to install new packages it thinks everything is still in the old directory. I can't figure out where to change this:

Quote16.     Execute Modification     /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/ManageBoards.template.php     Test failed
17.    Execute Modification    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/languages/Modifications.english.php    Test successful
18.    Execute Modification    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/languages/Modifications.english-utf8.php    Test successful
19.    Execute Modification    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/languages/Modifications.french.php    Test successful
20.    Extract File    ./Sources/PrettyUrls.php    
21.    Extract File    ./Sources/PrettyUrls-Filters.php    
22.    Extract File    ./Sources/Subs-PrettyUrls.php    
23.    Extract File    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/PrettyUrls.template.php    
24.    Extract Tree    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/pretty    
25.    Extract File    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/languages/PrettyUrls.english.php    
26.    Extract File    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/languages/PrettyUrls.french.php    

thats the old directory! but its trying to install and extract from there?

/home/undisputed/domains/ubloggit.com/public_html/ is the correct path

MelfromBoD

#3645
its installed but not working, when I click a link it doesnt do anything it takes me back home but it works on the links in the nav bar just not the posts or board links .

here is my .htaccess:

Quote#   Pretty URLs mod
#   http://code.google.com/p/prettyurls/ [nofollow]
#   .htaccess file generated automatically on: May 27, 2009, 13:53

RewriteEngine on

#   Rules for: actions
RewriteRule ^(activate|admin|announce|ban|boardrecount|buddy|calendar|cleanperms)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(collapse|convertentities|convertutf8|coppa|deletemsg|detailedversion|display|dlattach)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(dumpdb|editpoll|editpoll2|featuresettings|featuresettings2|findmember|help|helpadmin)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(im|jsoption|jsmodify|lock|lockVoting|login|login2|logout)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(maintain|manageattachments|manageboards|managecalendar|managesearch|markasread|membergroups|mergetopics)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(mlist|modifycat|modifykarma|modlog|movetopic|movetopic2|news|notify)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(notifyboard|optimizetables|packageget|packages|permissions|pgdownload|pm|post)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(post2|postsettings|printpage|profile|profile2|quotefast|quickmod|quickmod2)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(recent|regcenter|register|register2|reminder|removetopic2|removeoldtopics2|removepoll)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(repairboards|reporttm|reports|requestmembers|search|search2|sendtopic|serversettings)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(serversettings2|smileys|smstats|spellcheck|splittopics|stats|sticky|theme)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(trackip|about:mozilla|about:unknown|unread|unreadreplies|viewErrorLog|viewmembers|viewprofile)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(verificationcode|vote|viewquery|who|\.xml)/?$ ./index.php?pretty;action=$1 [L,QSA]

#   Rules for: boards
RewriteRule ^([-_!~*'()$a-zA-Z0-9]+)/?$ ./index.php?pretty;board=$1.0 [L,QSA]
RewriteRule ^([-_!~*'()$a-zA-Z0-9]+)/([0-9]*)/?$ ./index.php?pretty;board=$1.$2 [L,QSA]

#   Rules for: topics
RewriteRule ^([-_!~*'()$a-zA-Z0-9]+)/([-_!~*'()$a-zA-Z0-9]+)/?$ ./index.php?pretty;board=$1;topic=$2.0 [L,QSA]
RewriteRule ^([-_!~*'()$a-zA-Z0-9]+)/([-_!~*'()$a-zA-Z0-9]+)/([0-9]*|msg[0-9]*|new)/?$ ./index.php?pretty;board=$1;topic=$2.$3 [L,QSA]

TheDisturbedOne

I can't seem to get this to work right.  I'm not 100% sure my host has .htaccess per-directory config files, but if it doesn't is there a way to get it to work?

Dannii

Quote from: CruGeR on June 02, 2009, 06:02:27 PM
Hello
i have a small problem with mod... after install on SMF 2.0 RC1-1 (emulation 2.0 rc1) - no errors. my forum works with pretty url-s but don't use any css - style. Only on first page (www."myforum".eu/index.php) is good... prettyurl works perfect but forum looks like....... :)
i don't know wher i have an error
Can you show me a real link please?

Quote from: MelfromBoD on June 02, 2009, 11:38:12 PM
hi I moved my forum to another domain and database. But now when trying to install new packages it thinks everything is still in the old directory. I can't figure out where to change this:

Quote16.     Execute Modification     /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/ManageBoards.template.php     Test failed
17.    Execute Modification    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/languages/Modifications.english.php    Test successful
18.    Execute Modification    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/languages/Modifications.english-utf8.php    Test successful
19.    Execute Modification    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/languages/Modifications.french.php    Test successful
20.    Extract File    ./Sources/PrettyUrls.php    
21.    Extract File    ./Sources/PrettyUrls-Filters.php    
22.    Extract File    ./Sources/Subs-PrettyUrls.php    
23.    Extract File    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/PrettyUrls.template.php    
24.    Extract Tree    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/pretty    
25.    Extract File    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/languages/PrettyUrls.english.php    
26.    Extract File    /home/undisputed/domains/blogodirectory.com/public_html/forum/Themes/default/languages/PrettyUrls.french.php    

thats the old directory! but its trying to install and extract from there?

/home/undisputed/domains/ubloggit.com/public_html/ is the correct path
You need to fix all your theme directories. That has nothing to do with this mod! :)

Quote from: MelfromBoD on June 03, 2009, 12:41:19 AM
its installed but not working, when I click a link it doesnt do anything it takes me back home but it works on the links in the nav bar just not the posts or board links .

here is my .htaccess:

Quote#   Pretty URLs mod
#   http://code.google.com/p/prettyurls/
#   .htaccess file generated automatically on: May 27, 2009, 13:53

RewriteEngine on

#   Rules for: actions
RewriteRule ^(activate|admin|announce|ban|boardrecount|buddy|calendar|cleanperms)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(collapse|convertentities|convertutf8|coppa|deletemsg|detailedversion|display|dlattach)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(dumpdb|editpoll|editpoll2|featuresettings|featuresettings2|findmember|help|helpadmin)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(im|jsoption|jsmodify|lock|lockVoting|login|login2|logout)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(maintain|manageattachments|manageboards|managecalendar|managesearch|markasread|membergroups|mergetopics)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(mlist|modifycat|modifykarma|modlog|movetopic|movetopic2|news|notify)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(notifyboard|optimizetables|packageget|packages|permissions|pgdownload|pm|post)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(post2|postsettings|printpage|profile|profile2|quotefast|quickmod|quickmod2)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(recent|regcenter|register|register2|reminder|removetopic2|removeoldtopics2|removepoll)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(repairboards|reporttm|reports|requestmembers|search|search2|sendtopic|serversettings)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(serversettings2|smileys|smstats|spellcheck|splittopics|stats|sticky|theme)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(trackip|about:mozilla|about:unknown|unread|unreadreplies|viewErrorLog|viewmembers|viewprofile)/?$ ./index.php?pretty;action=$1 [L,QSA]
RewriteRule ^(verificationcode|vote|viewquery|who|\.xml)/?$ ./index.php?pretty;action=$1 [L,QSA]

#   Rules for: boards
RewriteRule ^([-_!~*'()$a-zA-Z0-9]+)/?$ ./index.php?pretty;board=$1.0 [L,QSA]
RewriteRule ^([-_!~*'()$a-zA-Z0-9]+)/([0-9]*)/?$ ./index.php?pretty;board=$1.$2 [L,QSA]

#   Rules for: topics
RewriteRule ^([-_!~*'()$a-zA-Z0-9]+)/([-_!~*'()$a-zA-Z0-9]+)/?$ ./index.php?pretty;board=$1;topic=$2.0 [L,QSA]
RewriteRule ^([-_!~*'()$a-zA-Z0-9]+)/([-_!~*'()$a-zA-Z0-9]+)/([0-9]*|msg[0-9]*|new)/?$ ./index.php?pretty;board=$1;topic=$2.$3 [L,QSA]
Can you show me some links to what does and doesn't work please?

Quote from: TheDisturbedOne on June 03, 2009, 01:34:41 AM
I can't seem to get this to work right.  I'm not 100% sure my host has .htaccess per-directory config files, but if it doesn't is there a way to get it to work?
Unless you have access to httpd.conf, no.
"Never imagine yourself not to be otherwise than what it might appear to others that what you were or might have been was not otherwise than what you had been would have appeared to them to be otherwise."

MelfromBoD

Danni, I've narrowed it down. It's something to do with QueryString.php the edited version causes all posts and board links to not work with pretty urls enabled, but when I disable pretty it still the same effect. But when I re-upload the default QueryString.php all the links work just not pretty. Here's my querystring.php:

Quote<?php
/**********************************************************************************
* QueryString.php                                                                 *
***********************************************************************************
* SMF: Simple Machines Forum                                                      *
* Open-Source Project Inspired by Zef Hemel ([email protected])                    *
* =============================================================================== *
* Software Version:           SMF 1.1.9                                           *
* Software by:                Simple Machines (http://www.simplemachines.org)     *
* Copyright 2006-2009 by:     Simple Machines LLC (http://www.simplemachines.org) *
*           2001-2006 by:     Lewis Media (http://www.lewismedia.com [nofollow])             *
* Support, News, Updates at:  http://www.simplemachines.org                       *
***********************************************************************************
* This program is free software; you may redistribute it and/or modify it under   *
* the terms of the provided license as published by Simple Machines LLC.          *
*                                                                                 *
* This program is distributed in the hope that it is and will be useful, but      *
* WITHOUT ANY WARRANTIES; without even any implied warranty of MERCHANTABILITY    *
* or FITNESS FOR A PARTICULAR PURPOSE.                                            *
*                                                                                 *
* See the "license.txt" file for details of the Simple Machines license.          *
* The latest version can always be found at http://www.simplemachines.org.        *
**********************************************************************************/
if (!defined('SMF'))
   die('Hacking attempt...');

/*   This file does a lot of important stuff.  Mainly, this means it handles
      the query string, request variables, and session management.  It contains
   the following functions:

   void cleanRequest()
      - cleans the request variables (ENV, GET, POST, COOKIE, SERVER) and
        makes sure the query string was parsed correctly.
      - handles the URLs passed by the queryless URLs option.
      - makes sure, regardless of php.ini, everything has slashes.
      - sets up $board, $topic, and $scripturl and $_REQUEST['start'].
      - determines, or rather tries to determine, the client's IP.

   array addslashes__recursive(array var)
      - returns the var, as an array or string, with slashes.
      - importantly adds slashes to keys and values!
      - calls itself recursively if necessary.

   array htmlspecialchars__recursive(array var)
      - adds entities (&quot;, &lt;, &gt;) to the array or string var.
      - importantly, does not effect keys, only values.
      - calls itself recursively if necessary.

   array urldecode__recursive(array var)
      - takes off url encoding (%20, etc.) from the array or string var.
      - importantly, does it to keys too!
      - calls itself recursively if there are any sub arrays.

   array stripslashes__recursive(array var)
      - removes slashes, recursively, from the array or string var.
      - effects both keys and values of arrays.
      - calls itself recursively to handle arrays of arrays.

   array htmltrim__recursive(array var)
      - trims a string or an the var array using html characters as well.
      - does not effect keys, only values.
      - may call itself recursively if needed.

   array validate_unicode__recursive(array var)
      - makes sure a string only contains character which are allowed in
        XML/XHTML (not 0-8, 11, 12, and 14-31.)
      - tries to handle UTF-8 properly, and shouldn't negatively affect
        character sets like ISO-8859-1.
      - does not effect keys, only changes values.
      - may call itself recursively if necessary.

   string ob_sessrewrite(string buffer)
      - rewrites the URLs outputted to have the session ID, if the user
        is not accepting cookies and is using a standard web browser.
      - handles rewriting URLs for the queryless URLs option.
      - can be turned off entirely by setting $scripturl to an empty
        string, ''. (it wouldn't work well like that anyway.)
      - because of bugs in certain builds of PHP, does not function in
        versions lower than 4.3.0 - please upgrade if this hurts you.
*/

// Clean the request variables - add html entities to GET and slashes if magic_quotes_gpc is Off.
function cleanRequest()
{
   global $board, $topic, $boardurl, $scripturl, $modSettings, $context, $db_prefix;
// Makes it easier to refer to things this way.
   $scripturl = $boardurl . '/index.php';

   // Save some memory.. (since we don't use these anyway.)
   unset($GLOBALS['HTTP_POST_VARS'], $GLOBALS['HTTP_POST_VARS']);
   unset($GLOBALS['HTTP_POST_FILES'], $GLOBALS['HTTP_POST_FILES']);

   // These keys shouldn't be set...ever.
   if (isset($_REQUEST['GLOBALS']) || isset($_COOKIE['GLOBALS']))
      die('Invalid request variable.');

   // Same goes for numeric keys.
   foreach (array_merge(array_keys($_POST), array_keys($_GET), array_keys($_FILES)) as $key)
      if (is_numeric($key))
         die('Invalid request variable.');

   // Numeric keys in cookies are less of a problem. Just unset those.
   foreach ($_COOKIE as $key => $value)
      if (is_numeric($key))
         unset($_COOKIE[$key]);

   // Get the correct query string.  It may be in an environment variable...
   if (!isset($_SERVER['QUERY_STRING']))
      $_SERVER['QUERY_STRING'] = getenv('QUERY_STRING');

   // Are we going to need to parse the ; out?
   if ((strpos(@ini_get('arg_separator.input'), ';') === false || @version_compare(PHP_VERSION, '4.2.0') == -1) && !empty($_SERVER['QUERY_STRING']))
   {
      // Get rid of the old one!  You don't know where it's been!
      $_GET = array();

      // Was this redirected?  If so, get the REDIRECT_QUERY_STRING.
      $_SERVER['QUERY_STRING'] = urldecode(substr($_SERVER['QUERY_STRING'], 0, 5) == 'url=/' ? $_SERVER['REDIRECT_QUERY_STRING'] : $_SERVER['QUERY_STRING']);

      // Replace ';' with '&' and '&something&' with '&something=&'.  (this is done for compatibility...)
      // !!! smflib
      parse_str(preg_replace('/&(\w+)(?=&|$)/', '&$1=', strtr($_SERVER['QUERY_STRING'], array(';?' => '&', ';' => '&', '%00' => '', "\0" => ''))), $_GET);
   }
   elseif (strpos(@ini_get('arg_separator.input'), ';') !== false)
   {
      $_GET = urldecode__recursive($_GET);

      if (@get_magic_quotes_gpc() != 0 && empty($modSettings['integrate_magic_quotes']))
         $_GET = stripslashes__recursive($_GET);

      // Search engines will send action=profile%3Bu=1, which confuses PHP.
      // !!! smflib
      foreach ($_GET as $k => $v)
      {
         if (is_string($v) && strpos($k, ';') !== false)
         {
            $temp = explode(';', $v);
            $_GET[$k] = $temp[0];

            for ($i = 1, $n = count($temp); $i < $n; $i++)
            {
               @list ($key, $val) = @explode('=', $temp[$i], 2);
               if (!isset($_GET[$key]))
                  $_GET[$key] = $val;
            }
         }

         // This helps a lot with integration!
         if (strpos($k, '?') === 0)
         {
            $_GET[substr($k, 1)] = $v;
            unset($_GET[$k]);
         }
      }
   }

   // There's no query string, but there is a URL... try to get the data from there.
   if (!empty($_SERVER['REQUEST_URI']))
   {
      // Remove the .html, assuming there is one.
      if (substr($_SERVER['REQUEST_URI'], strrpos($_SERVER['REQUEST_URI'], '.'), 4) == '.htm')
         $request = substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '.'));
      else
         $request = $_SERVER['REQUEST_URI'];

      // Replace 'index.php/a,b,c/d/e,f' with 'a=b,c&d=&e=f' and parse it into $_GET.
      parse_str(substr(preg_replace('/&(\w+)(?=&|$)/', '&$1=', strtr(preg_replace('~/([^,/]+),~', '/$1=', substr($request, strpos($request, basename($scripturl)) + strlen(basename($scripturl)))), '/', '&')), 1), $temp);
      $_GET += $temp;
   }

   // Add entities to GET.  This is kinda like the slashes on everything else.
   $_GET = addslashes__recursive(htmlspecialchars__recursive($_GET));

   // Clean up after annoying ini settings.  (magic_quotes_gpc might be off...)
   if (@get_magic_quotes_gpc() == 0 && empty($modSettings['integrate_magic_quotes']))
   {
      // E(G)PCS: ENV, (GET was already done), POST, COOKIE.
      $_ENV = addslashes__recursive($_ENV);
      $_POST = addslashes__recursive($_POST);
      $_COOKIE = addslashes__recursive($_COOKIE);

      // FILES work like this: k -> name -> array.  So be careful.
      foreach ($_FILES as $k => $dummy)
         $_FILES[$k]['name'] = addslashes__recursive($_FILES[$k]['name']);
   }

   // Take care of the server variables.
   $_SERVER = addslashes__recursive($_SERVER);

   // Let's not depend on the ini settings... why even have COOKIE in there, anyway?
   $_REQUEST = $_POST + $_GET;

   // Make sure $board and $topic are numbers.
   if (isset($_REQUEST['board']))
   {
      // Make sure that its a string and not something else like an array
      $_REQUEST['board'] = (string) $_REQUEST['board'];

      // If there's a slash in it, we've got a start value! (old, compatible links.)
      if (strpos($_REQUEST['board'], '/') !== false)
         list ($_REQUEST['board'], $_REQUEST['start']) = explode('/', $_REQUEST['board']);
      // Same idea, but dots.  This is the currently used format - ?board=1.0...
      elseif (strpos($_REQUEST['board'], '.') !== false)
         list ($_REQUEST['board'], $_REQUEST['start']) = explode('.', $_REQUEST['board']);
      // Now make absolutely sure it's a number.
      // Check for pretty board URLs too, and possibly redirect if oldschool queries were used.
      if (is_numeric($_REQUEST['board']))
      {
         $board = (int) $_REQUEST['board'];
         if (!isset($_REQUEST['pretty']))
            $context['pretty']['oldschoolquery'] = true;
      } else {
         $_REQUEST['board'] = str_replace(array('&#039;', '\\'), array("\x12", ''), $_REQUEST['board']);         $pretty_board_lookup = unserialize($modSettings['pretty_board_lookup']);
         $board = (int) isset($pretty_board_lookup[$_REQUEST['board']]) ? $pretty_board_lookup[$_REQUEST['board']] : 0;

         //   Fix $_REQUEST for silly mods that don't check $board
         $context['pretty']['query_string']['board'] = $_REQUEST['board'];
         $_REQUEST['board'] = $board;
      }
// This is for "Who's Online" because it might come via POST - and it should be an int here.
      $_GET['board'] = $board;
   }
   // Well, $board is going to be a number no matter what.
   else
      $board = 0;

   // If there's a threadid, it's probably an old YaBB SE link.  Flow with it.
   if (isset($_REQUEST['threadid']) && !isset($_REQUEST['topic']))
      $_REQUEST['topic'] = $_REQUEST['threadid'];

   // We've got topic!
   if (isset($_REQUEST['topic']))
   {
      // Make sure that its a string and not something else like an array
      $_REQUEST['topic'] = (string)$_REQUEST['topic'];
      
      // Slash means old, beta style, formatting.  That's okay though, the link should still work.
      if (strpos($_REQUEST['topic'], '/') !== false)
         list ($_REQUEST['topic'], $_REQUEST['start']) = explode('/', $_REQUEST['topic']);
      // Dots are useful and fun ;).  This is ?topic=1.15.
      elseif (strpos($_REQUEST['topic'], '.') !== false)
         list ($_REQUEST['topic'], $_REQUEST['start']) = explode('.', $_REQUEST['topic']);
      // Check for pretty topic URLs, and possibly redirect if oldschool queries were used.
      if (is_numeric($_REQUEST['topic']))
      {
         $topic = (int) $_REQUEST['topic'];
         if (!isset($_REQUEST['pretty']))
            $context['pretty']['oldschoolquery'] = true;
      } else {
         $_REQUEST['topic'] = str_replace(array('&#039;', '\\'), array("\x12", ''), $_REQUEST['topic']);
         //   Are we feeling lucky?
         $query = db_query("
            SELECT ID_TOPIC
            FROM {$db_prefix}pretty_topic_urls
            WHERE pretty_url = '$_REQUEST[topic]'
            LIMIT 1", __FILE__, __LINE__);
         //   No? No topic?!
         if (mysql_num_rows($query) == 0)
         {
            $topic = 0;
         } else {
            while ($row = mysql_fetch_assoc($query))
               $topic = (int) $row['ID_TOPIC'];
         }
         mysql_free_result($query);

         //   Fix $_REQUEST for silly mods that don't check $topic
         $context['pretty']['query_string']['topic'] = $_REQUEST['topic'];
         $_REQUEST['topic'] = $topic;

         //   That query should be counted separately
         $context['pretty']['db_count']++;
      }
// Now make sure the online log gets the right number.
      $_GET['topic'] = $topic;
   }
   else
      $topic = 0;

   // There should be a $_REQUEST['start'], some at least.  If you need to default to other than 0, use $_GET['start'].
   if (empty($_REQUEST['start']) || $_REQUEST['start'] < 0)
      $_REQUEST['start'] = 0;

   // The action needs to be a string and not an array or anything else   
   if (isset($_REQUEST['action']))
      $_REQUEST['action'] = (string) $_REQUEST['action'];
   if (isset($_GET['action']))
      $_GET['action'] = (string) $_GET['action'];

   // Store the REMOTE_ADDR for later - even though we HOPE to never use it...
   $_SERVER['BAN_CHECK_IP'] = isset($_SERVER['REMOTE_ADDR']) && preg_match('~^((([1]?\d)?\d|2[0-4]\d|25[0-5])\.){3}(([1]?\d)?\d|2[0-4]\d|25[0-5])$~', $_SERVER['REMOTE_ADDR']) === 1 ? $_SERVER['REMOTE_ADDR'] : 'unknown';

   // Find the user's IP address. (but don't let it give you 'unknown'!)
   if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_CLIENT_IP']) && (preg_match('~^((0|10|172\.(1[6-9]|2[0-9]|3[01])|192\.168|255|127)\.|unknown)~', $_SERVER['HTTP_CLIENT_IP']) == 0 || preg_match('~^((0|10|172\.(1[6-9]|2[0-9]|3[01])|192\.168|255|127)\.|unknown)~', $_SERVER['REMOTE_ADDR']) != 0))
   {
      // We have both forwarded for AND client IP... check the first forwarded for as the block - only switch if it's better that way.
      if (strtok($_SERVER['HTTP_X_FORWARDED_FOR'], '.') != strtok($_SERVER['HTTP_CLIENT_IP'], '.') && '.' . strtok($_SERVER['HTTP_X_FORWARDED_FOR'], '.') == strrchr($_SERVER['HTTP_CLIENT_IP'], '.') && (preg_match('~^((0|10|172\.(1[6-9]|2[0-9]|3[01])|192\.168|255|127)\.|unknown)~', $_SERVER['HTTP_X_FORWARDED_FOR']) == 0 || preg_match('~^((0|10|172\.(1[6-9]|2[0-9]|3[01])|192\.168|255|127)\.|unknown)~', $_SERVER['REMOTE_ADDR']) != 0))
         $_SERVER['REMOTE_ADDR'] = implode('.', array_reverse(explode('.', $_SERVER['HTTP_CLIENT_IP'])));
      else
         $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CLIENT_IP'];
   }
   if (!empty($_SERVER['HTTP_CLIENT_IP']) && (preg_match('~^((0|10|172\.(1[6-9]|2[0-9]|3[01])|192\.168|255|127)\.|unknown)~', $_SERVER['HTTP_CLIENT_IP']) == 0 || preg_match('~^((0|10|172\.(1[6-9]|2[0-9]|3[01])|192\.168|255|127)\.|unknown)~', $_SERVER['REMOTE_ADDR']) != 0))
   {
      // Since they are in different blocks, it's probably reversed.
      if (strtok($_SERVER['REMOTE_ADDR'], '.') != strtok($_SERVER['HTTP_CLIENT_IP'], '.'))
         $_SERVER['REMOTE_ADDR'] = implode('.', array_reverse(explode('.', $_SERVER['HTTP_CLIENT_IP'])));
      else
         $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CLIENT_IP'];
   }
   elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
   {
      // If there are commas, get the last one.. probably.
      if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') !== false)
      {
         $ips = array_reverse(explode(', ', $_SERVER['HTTP_X_FORWARDED_FOR']));

         // Go through each IP...
         foreach ($ips as $i => $ip)
         {
            // Make sure it's in a valid range...
            if (preg_match('~^((0|10|172\.(1[6-9]|2[0-9]|3[01])|192\.168|255|127)\.|unknown)~', $ip) != 0 && preg_match('~^((0|10|172\.(1[6-9]|2[0-9]|3[01])|192\.168|255|127)\.|unknown)~', $_SERVER['REMOTE_ADDR']) == 0)
               continue;

            // Otherwise, we've got an IP!
            $_SERVER['REMOTE_ADDR'] = trim($ip);
            break;
         }
      }
      // Otherwise just use the only one.
      elseif (preg_match('~^((0|10|172\.(1[6-9]|2[0-9]|3[01])|192\.168|255|127)\.|unknown)~', $_SERVER['HTTP_X_FORWARDED_FOR']) == 0 || preg_match('~^((0|10|172\.(1[6-9]|2[0-9]|3[01])|192\.168|255|127)\.|unknown)~', $_SERVER['REMOTE_ADDR']) != 0)
         $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
   }
   elseif (!isset($_SERVER['REMOTE_ADDR']))
   {
      $_SERVER['REMOTE_ADDR'] = '';
      // A new magic variable to indicate we think this is command line.
      $_SERVER['is_cli'] = true;
   }

   // Make sure we know the URL of the current request.
   if (empty($_SERVER['REQUEST_URI']))
      $_SERVER['REQUEST_URL'] = $scripturl . (!empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : '');
   elseif (preg_match('~^([^/]+//[^/]+)~', $scripturl, $match) == 1)
      $_SERVER['REQUEST_URL'] = $match[1] . $_SERVER['REQUEST_URI'];
   else
      $_SERVER['REQUEST_URL'] = $_SERVER['REQUEST_URI'];

   // And make sure HTTP_USER_AGENT is set.
   $_SERVER['HTTP_USER_AGENT'] = isset($_SERVER['HTTP_USER_AGENT']) ? htmlspecialchars(stripslashes($_SERVER['HTTP_USER_AGENT']), ENT_QUOTES) : '';

   // Some final checking.
   if (preg_match('~^((([1]?\d)?\d|2[0-4]\d|25[0-5])\.){3}(([1]?\d)?\d|2[0-4]\d|25[0-5])$~', $_SERVER['REMOTE_ADDR']) === 0)
      $_SERVER['REMOTE_ADDR'] = '';
}

// Adds slashes to the array/variable.  Uses two underscores to guard against overloading.
function addslashes__recursive($var, $level = 0)
{
   if (!is_array($var))
      return addslashes($var);

   // Reindex the array with slashes.
   $new_var = array();

   // Add slashes to every element, even the indexes!
   foreach ($var as $k => $v)
      $new_var[addslashes($k)] = $level > 25 ? null : addslashes__recursive($v, $level + 1);

   return $new_var;
}

// Adds html entities to the array/variable.  Uses two underscores to guard against overloading.
function htmlspecialchars__recursive($var, $level = 0)
{
   global $func;

   if (!is_array($var))
      return isset($func) ? $func['htmlspecialchars']($var, ENT_QUOTES) : htmlspecialchars($var, ENT_QUOTES);

   // Add the htmlspecialchars to every element.
   foreach ($var as $k => $v)
      $var[$k] = $level > 25 ? null : htmlspecialchars__recursive($v, $level + 1);

   return $var;
}

// Removes url stuff from the array/variable.  Uses two underscores to guard against overloading.
function urldecode__recursive($var, $level = 0)
{
   if (!is_array($var))
      return urldecode($var);

   // Reindex the array...
   $new_var = array();

   // Add the htmlspecialchars to every element.
   foreach ($var as $k => $v)
      $new_var[urldecode($k)] = $level > 25 ? null : urldecode__recursive($v, $level + 1);

   return $new_var;
}
// Strips the slashes off any array or variable.  Two underscores for the normal reason.
function stripslashes__recursive($var, $level = 0)
{
   if (!is_array($var))
      return stripslashes($var);

   // Reindex the array without slashes, this time.
   $new_var = array();

   // Strip the slashes from every element.
   foreach ($var as $k => $v)
      $new_var[stripslashes($k)] = $level > 25 ? null : stripslashes__recursive($v, $level + 1);

   return $new_var;
}

// Trim a string including the HTML space, character 160.
function htmltrim__recursive($var, $level = 0)
{
   global $func;

   // Remove spaces (32), tabs (9), returns (13, 10, and 11), nulls (0), and hard spaces. (160)
   if (!is_array($var))
      return isset($func) ? $func['htmltrim']($var) : trim($var, " \t\n\r\x0B\0\xA0");

   $new_var = array();

   // Go through all the elements and remove the whitespace.
   foreach ($var as $k => $v)
      $new_var[$k] = $level > 25 ? null : htmltrim__recursive($v, $level + 1);

   return $new_var;
}

// !!!
function validate_unicode__recursive($var)
{
   if (is_array($var))
      return array_map('validate_unicode__recursive', $var);

   $cleanup = array_merge(range(0, 8), range(11, 12), range(14, 31));

   // Assuming unicode for now - won't really hurt if we're wrong.
   for ($i = 0; $i < strlen($var); $i++)
   {
      $c = ord($var{$i});
      if (in_array($c, $cleanup))
      {
         $var = substr($var, 0, $i) . substr($var, $i + 1);
         $i--;
         continue;
      }

      if ($c < 192)
         continue;
      elseif ($c < 224)
         $i++;
      elseif ($c < 240)
         $i += 2;
      elseif ($c < 248)
         $i += 3;
      elseif ($c < 252)
         $i += 4;
      elseif ($c < 254)
         $i += 5;
   }

   return $var;
}

// Rewrite URLs to include the session ID.
function ob_sessrewrite($buffer)
{
   global $scripturl, $modSettings, $user_info, $context, $db_count, $sourcedir, $time_start, $txt;
// If $scripturl is set to nothing, or the SID is not defined (SSI?) just quit.
   if ($scripturl == '' || !defined('SID'))
      return $buffer;

   // Do nothing if the session is cookied, or they are a crawler - guests are caught by redirectexit().  This doesn't work below PHP 4.3.0, because it makes the output buffer bigger.
   // !!! smflib
   if (empty($_COOKIE) && SID != '' && empty($context['browser']['possibly_robot']) && @version_compare(PHP_VERSION, '4.3.0') != -1)
      $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(?!\?' . preg_quote(SID, '/') . ')(\?)?/', '"' . $scripturl . '?' . SID . '&amp;', $buffer);
   // Debugging templates, are we?
   elseif (isset($_GET['debug']))
      $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(\?)?/', '"' . $scripturl . '?debug;', $buffer);


/***   Pretty URLs says no!

   // This should work even in 4.2.x, just not CGI without cgi.fix_pathinfo.
   if (!empty($modSettings['queryless_urls']) && (!$context['server']['is_cgi'] || @ini_get('cgi.fix_pathinfo') == 1) && $context['server']['is_apache'])
   {
      // Let's do something special for session ids!
      if (defined('SID') && SID != '')
         $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?(?:' . SID . ';)((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html?' . SID . '\$2\"'", $buffer);
      else
         $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
   }


***/

   //   Rewrite the buffer with Pretty URLs!
   if ($modSettings['pretty_enable_filters'])
   {
      require_once($sourcedir . '/PrettyUrls-Filters.php');
      $buffer = pretty_rewrite_buffer($buffer);
   }

   //   Update the load times
   $pattern = '~<span class="smalltext">' . $txt['smf301'] . '([.0-9]+)' . $txt['smf302'] . '([0-9]+)' . $txt['smf302b'] . '</span>~';
   if (preg_match($pattern, $buffer, $matches))
   {
      $newTime = round(array_sum(explode(' ', microtime())) - array_sum(explode(' ', $time_start)), 3);
      $timeDiff = $newTime - (float) $matches[1];
      $queriesDiff = $db_count + $context['pretty']['db_count'] - (int) $matches[2];
      //   Remove the link if you like, I won't enforce it like others do
      $newLoadTime = '<span class="smalltext">' . $txt['smf301'] . $newTime . $txt['smf302'] . $db_count . $txt['smf302b'] . ' (<a href="http://code.google.com/p/prettyurls/ [nofollow]">Pretty URLs</a> adds ' . $timeDiff . 's, ' . $queriesDiff . 'q)</span>';
      $buffer = str_replace($matches[0], $newLoadTime, $buffer);
   }

   // Return the changed buffer.
   return $buffer;
}

?>

koopa

I have a problem with posting. When i enable the Pretty URL, i cant reply to any message. When i click any topic or board, i will get redirected out and logged out. I did not touch the cache. After i disable Pretty URL, then its okay.

Version 2.0 RC1-1
Pretty URL version 0.93
hxxp:www.flydamnit.com [nonactive]

TheDisturbedOne

Ok they do have those two features enabled.  Do I have to maunally edit htaccess, because just installing the MOD gives me all 404s.  And yes I tried the suggestion on the google tracker

manixless

hello again

i still have 9.0 version. When i try to unistall this packeage print the error at  ./Sources/QueryString.php
Can you give me the instructions to unistall it manually? The package parser can read the xml file of this mod.

thank

Dannii

MelfromBoD, can you just give me some links?

Quote from: koopa on June 03, 2009, 03:15:41 PM
I have a problem with posting. When i enable the Pretty URL, i cant reply to any message. When i click any topic or board, i will get redirected out and logged out. I did not touch the cache. After i disable Pretty URL, then its okay.

Version 2.0 RC1-1
Pretty URL version 0.93
Anything in your error logs?

Quote from: TheDisturbedOne on June 03, 2009, 03:44:40 PM
Ok they do have those two features enabled.  Do I have to maunally edit htaccess, because just installing the MOD gives me all 404s.  And yes I tried the suggestion on the google tracker
If you're sure they do have those features, you could try adding RewriteBase / to the top of your .htaccess file.

Quote from: manfred on June 03, 2009, 05:37:50 PM
hello again

i still have 9.0 version. When i try to unistall this packeage print the error at  ./Sources/QueryString.php
Can you give me the instructions to unistall it manually? The package parser can read the xml file of this mod.

thank
Well then just do the reverse of what the package parser says.
"Never imagine yourself not to be otherwise than what it might appear to others that what you were or might have been was not otherwise than what you had been would have appeared to them to be otherwise."

MelfromBoD

I can only afford to enable pretty for a few mins b/c the forum is active and enabled causes all except the top nav bar links to work. I'm not sure what you're suggesting Dannii.

mark7144

#3654
BUG: Threads with "!" in the title are not linkable. When you post a link to such a thread, only up to the "!" converts to a link and therefore it takes them to a 404. The only way you can do it is if you manually place the URL tags around the link but no one does that really.

I recommend you don't allow "!" characters to show in the friendly URLs.

cosp

I am getting the strange Error in logs and way too many, almost on every click on forums.


http://www.cosp.org.pk/forums/index.php?pretty;action=modlog
8: Undefined index: pretty_admin_menu
File: /var/www/sites/misc/cosp/forums/Sources/Subs.php
Line: 2796


the url in the first line changes, sometimes http://www.cosp.org.pk/forums/index.php?pretty;action=viewErrorLog&amp;desc and etc...

Dannii

Quote from: MelfromBoD on June 03, 2009, 10:28:28 PM
I can only afford to enable pretty for a few mins b/c the forum is active and enabled causes all except the top nav bar links to work. I'm not sure what you're suggesting Dannii.
Well enable it, copy the links, and then disable the mod again. The links will still work (or not work) even if rewriting isn't enabled.

Quote from: mark7144 on June 04, 2009, 06:56:11 AM
BUG: Threads with "!" in the title are not linkable. When you post a link to such a thread, only up to the "!" converts to a link and therefore it takes them to a 404. The only way you can do it is if you manually place the URL tags around the link but no one does that really.

I recommend you don't allow "!" characters to show in the friendly URLs.
Hmm, this is something I've considered fixing for a while, but I don't really think it's worth it. If you do, you can easily remove the ! line yourself.

Quote from: cosp on June 04, 2009, 07:24:39 AM
I am getting the strange Error in logs and way too many, almost on every click on forums.


http://www.cosp.org.pk/forums/index.php?pretty;action=modlog
8: Undefined index: pretty_admin_menu
File: /var/www/sites/misc/cosp/forums/Sources/Subs.php
Line: 2796


the url in the first line changes, sometimes http://www.cosp.org.pk/forums/index.php?pretty;action=viewErrorLog&amp;desc and etc...
You're missing the language entries in the Modifications language file.
"Never imagine yourself not to be otherwise than what it might appear to others that what you were or might have been was not otherwise than what you had been would have appeared to them to be otherwise."

TheDisturbedOne

#3657
Quote from: Dannii on June 03, 2009, 10:00:15 PM
Quote from: TheDisturbedOne on June 03, 2009, 03:44:40 PM
Ok they do have those two features enabled.  Do I have to maunally edit htaccess, because just installing the MOD gives me all 404s.  And yes I tried the suggestion on the google tracker
If you're sure they do have those features, you could try adding RewriteBase / to the top of your .htaccess file.
HOLY #$%^& it worked!  One more small thing.  I ran Pretty URLs about a year ago on a different server, different URL.  Some of the links are sending me to that old URL.  How do I change it?  The forum's URL is correct, but there is probably a line in the database (which I can't find) that controls it.  And yes I have run Pretty URL server maintenance.

And one more thing.  How do I make my htaccess so that I can have the MOD and redirects going simultaneously?

djkmmo

Quote from: TheDisturbedOne on June 04, 2009, 03:55:03 PM
Quote from: Dannii on June 03, 2009, 10:00:15 PM
Ok they do have those two features enabled.  Do I have to maunally edit htaccess, because just installing the MOD gives me all 404s.  And yes I tried the suggestion on the google tracker
If you're sure they do have those features, you could try adding RewriteBase / to the top of your .htaccess file.
One thing related to that, this mod totally purges the existing .htaccess file, so even if you add RewriteBase / it will disappear the next time you run the Pretty URL maintenance. Is it supposed to be that way? I would prefer if it would only update those parts relevant to Pretty URL. Now I have to log in to my host and update the .htaccess manually after I have run maintenance and add RewriteBase / manually.

qqq111

Quote from: sombra on May 30, 2009, 11:18:03 AM
hello i got to say this is a great mod really nice

but i got a little question im looking for a problem i got in google webmaster were its telling me


index.php?action=sitemap;xml  Sitemap 28/05/2009 Warnings 5231 Details


Stats of Sitemap
Total of URL: 5231
URL que se han indexado: 403

like you can see its only indezed 400 pages and im looking for the reason why and i got to the conclution the problem maybe can be betwen

pretty url mod and sitemap mod



i notice that the url on the sitemap are normal url like index.php?action is there any way i can make pretty url change this?

any sugestions?

Hi, I have tried changing the following in PrettyUrls-Filters.php, but has not the expected result. Maybe someone can do better than me. The regular expressions have turned me crazy ~.~

// Find all URLs in the buffer
$context['pretty']['search_patterns'][] = '~(<a[^>]+href=|<loc|<link[^>]+href=|<form[^>]+?action=)(\"[^\"#]+|\'[^\'#]+|>[^<#]+)~';

// Put the URLs back into the buffer
$context['pretty']['replace_patterns'][] = '~(<a[^>]+href=|<loc|<link[^>]+href=|<form[^>]+?action=)(\"[^\"]+\"|\'[^\']+\'|>[^<]+<)~';


This one gave better result, but equally it is bad
// Find all URLs in the buffer
$context['pretty']['search_patterns'][] = '~(<a[^>]+href=|<loc>|<link[^>]+href=|<form[^>]+?action=)(\"[^\"#]+|\'[^\'#]+|[^\"][^\"#]+)~';

// Put the URLs back into the buffer
$context['pretty']['replace_patterns'][] = '~(<a[^>]+href=|<loc>|<link[^>]+href=|<form[^>]+?action=)(\"[^\"]+\"|\'[^\']+\'|[^\"][^\"]+[^\"])~';


This also gave better result, but equally it is bad
// Find all URLs in the buffer
$context['pretty']['search_patterns'][] = '~(<a[^>]+href=|<loc>|<link[^>]+href=|<form[^>]+?action=)(\"[^\"#]+|\'[^\'#]+|[^\"][^\"#]+[^$\/\?])~';

// Put the URLs back into the buffer
$context['pretty']['replace_patterns'][] = '~(<a[^>]+href=|<loc>|<link[^>]+href=|<form[^>]+?action=)(\"[^\"]+\"|\'[^\']+\'|[^\"][^\"]+[^\"][^$\/\?])~';


Any suggestion?

Advertisement: