vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 4.x Add-ons (https://vborg.vbsupport.ru/forumdisplay.php?f=245)
-   -   Miscellaneous Hacks - Custom SEO urls (mod_rewrite only) (https://vborg.vbsupport.ru/showthread.php?t=231568)

Carnage 12-28-2009 10:00 PM

Custom SEO urls (mod_rewrite only)
 
1 Attachment(s)
What does this do?
This mod allows you to define the beginning part of all the friendly urls. Eventually, more of the url may be customizable but this should be enough to provide a nice structure to your site anyway. I have now released this as more of a mod to make it easier for the less technical admins.

What use is this to me?
I can see a couple of major uses here.
1. If you want to translate the friendly urls into your local language (so instead of having http://example.com/threads/123-Test-Thread/ you have http://example.com/[translation]/123-Test-thread)
2. You want a bit more structure to your links eg forum/threads, forum/posts, blogs/entries etc
3. You just don't like the defaults you've been stuck with and want to change to t,p,f,b and e

Installation
1. First step here, is to ensure that the default mod rewrite urls work for you. Upload the default .htaccess file from the do_not_upload folder to your forums and switch on mod rewrite friendly urls in the server settings and optimisations area of your control panel.
2.Browse around your forums and check that all the links still work. (If they don't you need to work with vb support and your host to get them working)
3. Upload the contents of the upload folder in the zip.
4. Import the product.
5. There is now a new option group in your admin cp; friendly url settings. Change these to your liking.
5a. There is also a link to the rewrite rule generator from the settings page; once you've got the settings to your liking, visit the link to generate a .htaccess file. Alternativly follow the instructions below to make your own.
6. Once you've made these changes, you need to edit your .htaccess file rewrite rules to reflect the changes you made. You need to replicate the change to this file that you've made to the options. you will see a set of:
Code:

RewriteRule ^threads/([0-9]+)(?:/?$|(?:-[^/]+))(?:/?$|(?:/page([0-9]+)?)) showthread.php?t=$1&page=$2&%{QUERY_STRING}
RewriteRule ^members/([0-9]+) member.php?u=$1&%{QUERY_STRING}
RewriteRule ^forums/([0-9]+)(?:/?$|(?:-[^/]+))(?:/?$|(?:/page([0-9]+)?)) forumdisplay.php?f=$1&page=$2&%{QUERY_STRING}
RewriteRule ^blogs/([0-9]+)(?:/?$|(?:-[^/]+))(?:/?$|(?:/page([0-9]+)?)) blog.php?u=$1&page=$2&%{QUERY_STRING}
RewriteRule ^entries/([0-9]+)(?:/?$|(?:-[^/]+))(?:/?$|(?:/page([0-9]+)?)) entry.php?b=$1&page=$2&%{QUERY_STRING}

You need to change the red bits to match your settings.

7. (Optional) Extra credit. Some people want the /forums/ to point to the forumindex page and /blogs/ to point to blog.php the following rewrite rules will take care of this. These should be added to the .htaccess file (don't overwrite any existing rules, these are new ones)

Code:

RewriteRule ^forums/(index.php)?$ forum.php?%{QUERY_STRING}
RewriteRule ^blogs/(index.php)?$ blog.php?%{QUERY_STRING}

Finally do a search of your templates + phrases for occurrences of forum.php and blog.php and change them to forums/index.php and blogs/index.php (or forums/ and blogs/) respectively.

forums.domain.com and blogs.domain.com support
This is not quite as easy as the above and requires a file edit to achieve.
If you are using 4.0.1; you can skip the file edit part as it appears to work without.
1. Make a backup copy of includes/class_friendly_url.php
2. Around line 604 find:
PHP Code:

        // REQUEST_URI is dependable for apache
        
if (isset($_SERVER['REQUEST_URI']))
        {
            
// return the raw url
            
$url $_SERVER['REQUEST_URI'];
            
$url $this->registry->input->strip_sessionhash($url);

            return 
$url;
        } 

Replace

PHP Code:

$url $_SERVER['REQUEST_URI']; 

with
PHP Code:

$url 'http://' $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 

3. In your apache config or appropriate server config file, set a serveralias for the subdomains you want to use (eg forums.domain.com) You may need to contact your host for help with this step.
4. In the vbulletin control panel set the cookie domain to be .yourdomain.com
I dont know if this will have any knock on effects elsewhere, but it seems to be working for me on my dev board.
5. You can now set a value for forums to be http://forums.domain.com and blogs to be http://blogs.domain.com or similar based upon your requirement.
6. Rewrite rules are a bit more complex for this setup; this is a good resource for getting the server side stuff setup: http://www.reconn.us/content/view/46/67/

example rewrite rules:

Code:


RewriteCond %{HTTP_HOST} ^(www.)?forums.domain.com$ [NC]
RewriteRule ^threads/([0-9]+)(?:/?$|(?:-[^/]+))(?:/?$|(?:/page([0-9]+)?)) showthread.php?t=$1&page=$2&%{QUERY_STRING}
RewriteRule ^members/([0-9]+) member.php?u=$1&%{QUERY_STRING}
RewriteRule ^/([0-9]+)(?:/?$|(?:-[^/]+))(?:/?$|(?:/page([0-9]+)?)) forumdisplay.php?f=$1&page=$2&%{QUERY_STRING}
RewriteRule ^/(index.php)?$ forum.php?%{QUERY_STRING}

RewriteCond %{HTTP_HOST} ^(www.)?blogs.domain.com$ [NC]
RewriteRule ^entries/([0-9]+)(?:/?$|(?:-[^/]+))(?:/?$|(?:/page([0-9]+)?)) entry.php?b=$1&page=$2&%{QUERY_STRING}
RewriteRule ^/(index.php)?$ blog.php?%{QUERY_STRING}
RewriteRule ^/([0-9]+)(?:/?$|(?:-[^/]+))(?:/?$|(?:/page([0-9]+)?)) blog.php?u=$1&page=$2&%{QUERY_STRING}

Changelog
  • 4.0-0.1 a4
    • Added file to generate rewrite rules
    • Removed old instructions from this post to prevent confusion.
  • 4.0-0.1 a3
    • Fixed missing settings in product file.
  • 4.0-0.1 a2
    • Released as product
  • 4.0-0.1 a1
    • Initial release

Notes
  • forums.domain.com and blogs.domain.com is possible, but requires a file edit; Instructions above)
  • adding extra information to urls is /not/ currently possible (eg tags, forum name to threads etc)
  • if you want a custom url format, post what you would like and if its possible, I can give you more pointers on how to implement it.
  • if you change your url format, you may want to leave the old rewrite rules in making a copy of them instead of editing them.
  • if you want the old instructions, for manual file edits (advanced users only) pm me.
  • There is some experimental code now attached, this provides an example of how to create custom uri formats (includes forum name in thread urls) but is no where near finished and is for advanced users (read coders) only. This functionality will be built into the product once its been tested and is more stable.

Charlie98902 12-29-2009 03:11 PM

Tagged for future use.

BSMedia 12-29-2009 04:21 PM

This seems to be more of an article ;)

But useful information none the less!

Zaiaku 12-29-2009 04:29 PM

Quote:

Originally Posted by BSMedia (Post 1941639)
This seems to be more of an article ;)

But useful information none the less!

I kind of have to agree with it. At first that's what I thought this was.

rtyagis 12-29-2009 05:08 PM

Good Mod. Waiting for live demo.:up:

Carnage 12-29-2009 05:19 PM

Quote:

Originally Posted by BSMedia (Post 1941639)
This seems to be more of an article ;)

But useful information none the less!

Right now it is it may become a mod when the options are settable from the admin cp: I looked at how to do this with hooks/plugins and its a mess... I came up with a better way which requires file edits; but they are so trivial I submitted them as a patch to vb. Once I get feedback on the chances of getting the patch included in 4.0.x I'll know if its worth developing this into a full mod.

Ryan Ashbrook 12-29-2009 05:58 PM

Tagged. :)

Alfa1 12-29-2009 06:24 PM

Do you plan to add forums.domain.com in the future? I would be extremely happy if you do.

Carnage 12-29-2009 10:35 PM

I'm not sure if its possible; however I have an idea how it might be possible to get it to work.

Edit:
Tested my idea; it is at least in theory possible to have forums.example.com; if you set the path to http://forums.yourdomain.com/threads (for threads) the urls will be correct; but i've not idea how to get the rewrites working for it...

jj 12-29-2009 11:05 PM

I see this as an article, too. Nevertheless it's tagged for future use ;)


All times are GMT. The time now is 08:57 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01268 seconds
  • Memory Usage 1,758KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (3)bbcode_code_printable
  • (3)bbcode_php_printable
  • (2)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete