Go Back   vb.org Archive > vBulletin Modifications > vBulletin 4.x Modifications > vBulletin 4.x Add-ons
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools
Custom SEO urls (mod_rewrite only) Details »»
Custom SEO urls (mod_rewrite only)
Version: 4.0-0.1 a4, by Carnage Carnage is offline
Developer Last Online: Sep 2014 Show Printable Version Email this Page

Category: Miscellaneous Hacks - Version: 4.0.0 Rating:
Released: 12-28-2009 Last Update: 01-18-2010 Installs: 43
Template Edits
Re-useable Code Code Changes Additional Files Is in Beta Stage  
No support by the author.

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.

Download Now

File Type: zip Custom Friendly URL's v4.0-0.1 alpha 4.zip (17.5 KB, 426 views)
File Type: zip experimental.zip (9.3 KB, 222 views)

Screenshots

File Type: jpg customurls.jpg (89.7 KB, 0 views)

Show Your Support

  • This modification may not be copied, reproduced or published elsewhere without author's permission.
Благодарность от:
Naijasite

Comments
  #32  
Old 01-15-2010, 06:00 PM
Mukashi's Avatar
Mukashi Mukashi is offline
 
Join Date: Jan 2004
Location: Brisbane, Australia
Posts: 144
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I know this one might be a bit of a long shot, but would there be some way to set things up so that each category on the CMS could itself go on a separate subdomain, so we could do things like splitting up news and content sections?
Reply With Quote
  #33  
Old 01-15-2010, 11:29 PM
Carnage Carnage is offline
 
Join Date: Jan 2005
Location: uk
Posts: 760
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

@mukashi: Not with the current version; i've not really touched upon how to customise cms urls as they are handled differently from forum urls. It's something i'll probably look at in the future however.

I've been playing around with whats possible. Currently i've managed to flip the id and the title around sucessfully. As well as including the forum name in the url for threads. I'm hoping to bring quite a bit of customisation in the future for forum urls.
Reply With Quote
  #34  
Old 01-16-2010, 03:40 PM
Carnage Carnage is offline
 
Join Date: Jan 2005
Location: uk
Posts: 760
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Added a file to the zip which gets uploaded to the admincp. This file does a best guess generation of rewrite rules for you.
Reply With Quote
  #35  
Old 01-18-2010, 08:29 PM
ndL ndL is offline
 
Join Date: Oct 2007
Posts: 34
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

trying to get working with subdomain.domain.com

but i have a problem with this step:
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.

setting it (site name/url/contact details) changes whole vbulletins default domain. help? i want to open home with domain.com and forums with subdomain
Reply With Quote
  #36  
Old 01-18-2010, 10:32 PM
winstone winstone is offline
 
Join Date: Dec 2006
Posts: 68
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Carnage- View Post
@winstone:
Currently I can achieve that for forums + subforums only. Doing it for threads, appears to need a database query. Which is just unacceptable considering the number of urls a typical page builds.
not if you modify the db query that gets the thread data
I know it's a lot of work and there are other ways to do it as well, maybe by checking all the cached templates and rewriting all matched urls is easier, in any case i'll defiantly do this or might give up n go with vbseo even tho its a rip off (IMO)
Reply With Quote
  #37  
Old 01-19-2010, 09:43 AM
Carnage Carnage is offline
 
Join Date: Jan 2005
Location: uk
Posts: 760
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
setting it (site name/url/contact details) changes whole vbulletins default domain. help? i want to open home with domain.com and forums with subdomain
You need to change the setting in the friendly url settings. If you change the setting for threads to http://forums.domain.com/threads and the forums friendly url to http://forums.domain.com/index.php it should work.

Quote:
not if you modify the db query that gets the thread data
The problem isn't that the data isn't avalaible anywhere, its that its not avaliable within the part of the code that forms the url. I've been experimenting, I've managed to save and retrieve the data in most important places (eg forum display, forum home, thread display etc) but not everywhere. It needs a bit more work yet still leaves some dead urls around the place... (vb's fault for not using {vb:link ...} everywhere a link is made)

Quote:
I know it's a lot of work and there are other ways to do it as well, maybe by checking all the cached templates and rewriting all matched urls is easier, in any case i'll defiantly do this or might give up n go with vbseo even tho its a rip off (IMO)
vbSeo does a few thigns this can't, but most people jsut want customisable urls, so for them it is a rip off. Rewriting templates or output is one way to do it but its ugly, bug prone and inefficient.

Quote:
Coder
You are marked on here as a coder, so I assume this means you've release at least one mod implying that you understand php. I'll upload the code i've been working on for threads and you can give it a go, be aware though, you will need to create your own rewrite rules and edit the code to change the url structure.
Reply With Quote
  #38  
Old 01-19-2010, 10:06 AM
BBF BBF is offline
 
Join Date: Dec 2006
Location: Israel, Netanya.
Posts: 97
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

it's possible to replace forums ids with names?
for example:
domain.com/forums/10
to: domain.com/forums/off-topic
Reply With Quote
  #39  
Old 01-19-2010, 10:30 AM
Gnoll's Avatar
Gnoll Gnoll is offline
 
Join Date: Dec 2009
Location: İzmir
Posts: 89
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

hmm looks nice /threads/forum/topic

can we rewrite it as /forum-f<id>/topic-t<id>.html ? or /forum/<id>-topic
Reply With Quote
  #40  
Old 01-19-2010, 10:33 AM
winstone winstone is offline
 
Join Date: Dec 2006
Posts: 68
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Carnage- View Post
You are marked on here as a coder, so I assume this means you've release at least one mod implying that you understand php. I'll upload the code i've been working on for threads and you can give it a go, be aware though, you will need to create your own rewrite rules and edit the code to change the url structure.
I've only released some javascript based mod but actually I only code in PHP
Thanks for sharing your thoughts and the code, I haven't started on working on URL rewrites and SEO yet but I will soon

VB should have used one single router and one single method to create links, but what's been released is a mess. I call vbSEO rip off when comparing it with other community softwares out there which provide very good SEO tools for free and the cost for vbSEO is almost the same as what you would pay to buy those softwares, otherwise I'm not questioning it's functionalities
Reply With Quote
  #41  
Old 01-19-2010, 11:48 AM
Carnage Carnage is offline
 
Join Date: Jan 2005
Location: uk
Posts: 760
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
it's possible to replace forums ids with names?
That one isn't easilly possible, the id needs to be avaliable somewhere for vb to use to query the db with.

Quote:
can we rewrite it as /forum-f<id>/topic-t<id>.html ? or /forum/<id>-topic
If you are confidant with php, you can take a look at the contents of the experimental zip files I uploaded; otherwise you will have to wait until that code is stable and included in the product.

Quote:
should have used one single router and one single method to create links, but what's been released is a mess.
I suspect that this will be the case once the rewrite is completed eg by 4.2/4.3 but for 4.0.x we have to cope with the mess thats been made.

Quote:
I call vbSEO rip off when comparing it with other community softwares out there which provide very good SEO tools for free and the cost for vbSEO is almost the same as what you would pay to buy those softwares, otherwise I'm not questioning it's functionalities
I agree with this fully, especially when you consider it used to cost $150 even when vbulleitn was only $160 to buy. If it were $50 I immagine it'd be installed on pretty much every vbulletin board (except the official ones of cause )

I almost wonder if IB have got some deal with vbSEO not to kill them off; it took so long to get friendly urls in the core package and even with them in there, the functionallity is so lacking. While developing this i've been constantly amased at how easy it was to get most functionlity working. To get it working perfectly requires a few file edits, but vb could have made them.

I intend to keep making improvments to this product including the amount of customisation avaliable and hopefully expanding to other areas eg the CMS untill vb improve the friendly urls in the core product.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 04:15 PM.


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.07401 seconds
  • Memory Usage 2,371KB
  • Queries Executed 26 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (3)bbcode_code
  • (3)bbcode_php
  • (10)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_post
  • (1)navbar
  • (4)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (4)pagenav_pagelink
  • (11)post_thanks_box
  • (1)post_thanks_box_bit
  • (11)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit
  • (11)post_thanks_postbit_info
  • (10)postbit
  • (3)postbit_attachment
  • (11)postbit_onlinestatus
  • (11)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • fetch_musername
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • post_thanks_function_fetch_thanks_bit_start
  • post_thanks_function_show_thanks_date_start
  • post_thanks_function_show_thanks_date_end
  • post_thanks_function_fetch_thanks_bit_end
  • post_thanks_function_fetch_post_thanks_template_start
  • post_thanks_function_fetch_post_thanks_template_end
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_attachment
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete