I had been trying lot of forum softwares ( around 5 till now ) from last Friday and was testing BBPRESS yesterday. The new version9.x has lot of improvement over its 8.x version but one thing I found common in both of them
- “Forum” keyword was appended when you accesss any forum e.g http://sitename.com/<forum-directory>/forum/<forum slug>
- “topic” keyword was also appended for every post made e.g http://sitename.com<forum-directory>/topic/<actualy topic slug>
Now I understand why both the keywords are reqired but again from SEO point it has no meaning unless somebody runs a forum on “forums” topic. The next thing I did was look around for a hack and luckily at this post there was a solution , but not actual plugin was supported. I copied the code given there and tested around and was successful.
Before I start, I have just tested around with the code given by the memebers over there. So test it before you use it. And moreover I am not supporting it as I did not make it and cant do it either.
I made a plugin from the code given and took re-write code for .htaccess files. Here is how they look
PLUGIN:( Taken from the forum link )
<?php
/*
Plugin Name: Remove Topic Forum
Plugin URI: http://bbpress.org/
Description: Allows to remove forum and topic word in url
Author: Ashish Mohta
Version: 1.0
Author URI: https://www.technospot.net/blogs/blogs/
*/function my_get_forum_link_filter( $link , $forum_id = 0 ) {
//retrieve the forum object
$forum = get_forum( get_forum_id( $forum_id ));//check for rewrite
$rewrite = bb_get_option( ‘mod_rewrite’ );
if ( $rewrite ) {
//what kind of rewrite there is? slug use “forum_slug” column, else the column is “forum_id”
$column = ($rewrite === ’slugs’)?(’forum_slug’):(’forum_id’);// change /forum/pets-discussions in /pets-discussions
// this work only if the rewrite module is modded!
// and this work only if the slugged name will NEVER
// be a reserved word like “rss” or “bb-images”
// and this is achieved by a filter on bb_slug_sanitize
$link = str_replace(’forum/’ . $forum->$column , $forum->$column, $link);
}
return $link.”/”; // Very important line! // Added extra slash :Ashish
}add_filter( ‘get_forum_link’, ‘my_get_forum_link_filter’ );
function my_get_topic_link_filter( $link, $topic_id = 0) {
//retrieve the topic object
$topic = get_topic( get_topic_id( $topic_id ));//retrieve the forum object that is the topic container
$forum = get_forum( get_forum_id( $topic->forum_id ));//check for rewrite
$rewrite = bb_get_option( ‘mod_rewrite’ );
if ( $rewrite ) {
//what kind of rewrite there is? slug use “forum_slug” column, else the column is “forum_id”
$column = ($rewrite === ’slugs’)?(’forum_slug’):(’forum_id’);//create the “forum/pets-discussions” chunk to show the hierarchical relation forum->topic
$forum_nice_uri = “forum/” . $forum->$column . “/”;//attach the hierarchical chunk to the link
$link = str_replace(bb_get_option(’uri’), bb_get_option(’uri’) . $forum_nice_uri, $link);// change /forum/pets-discussions/topic/my-sweet-dog in /pets-discussions/my-sweet-dog
// this work only if the rewrite module is modded!
// and this work only if the slugged name will NEVER
// be a reserved word like “rss” or “bb-images”
// and this is achieved by a filter on bb_slug_sanitize
$link = str_replace(’forum/’ . $forum->$column , $forum->$column, $link);
$link = str_replace(’topic/’ . $topic->$column , $topic->$column, $link);
}return $link.”/” ; // Very important line! // Added Extra Slash :Ashish
}add_filter( ‘get_topic_link’, ‘my_get_topic_link_filter’ );
function my_bb_slug_sanitize_filter( $text_slug, $text_original = ”, $length = 0 ) {
// add “r-” by regex when the string begins with “bb-” or “my-” or is a reserved word
return preg_replace(’/^(my-.*|bb-.*|rss|tags|view|profiles)$/’, ‘r-$1′, $text_slug);
}add_filter( ‘bb_slug_sanitize’, ‘my_bb_slug_sanitize_filter’ );
?>
.htcaccess file:
( Taken from one same forum link and modified a little. You will need to remove the MULTIVIEW from your existing .htaccess file )
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /forumsOptions +FollowSymlinks
RewriteRule ^tags/([^/]+)/page/([0-9]+)/?$ tags.php?tag=$1&page=$2 [L,QSA]
RewriteRule ^tags/([^/]+)/?$ tags.php?tag=$1 [L,QSA]
RewriteRule ^tags/?$ tags.php [L,QSA]
RewriteRule ^profile/([^/]+)/page/([0-9]+)/?$ profile.php?id=$1&page=$2 [L,QSA]
RewriteRule ^profile/([^/]+)/([^/]+)/?$ profile.php?id=$1&tab=$2 [L,QSA]
RewriteRule ^profile/([^/]+)/([^/]+)/page/([0-9]+)/?$ profile.php?id=$1&tab=$2&page=$3 [L,QSA]
RewriteRule ^profile/([^/]+)/?$ profile.php?id=$1 [L,QSA]
RewriteRule ^view/([^/]+)/page/([0-9]+)/?$ view.php?view=$1&page=$2 [L,QSA]
RewriteRule ^view/([^/]+)/?$ view.php?view=$1 [L,QSA]
RewriteRule ^rss/?$ rss.php [L,QSA]
RewriteRule ^rss/forum/([^/]+)/?$ rss.php?forum=$1 [L,QSA]
RewriteRule ^rss/topic/([^/]+)/?$ rss.php?topic=$1 [L,QSA]
RewriteRule ^rss/tags/([^/]+)/?$ rss.php?tag=$1 [L,QSA]
RewriteRule ^rss/profile/([^/]+)/?$ rss.php?profile=$1 [L,QSA]RewriteRule ^([^.]+)/([^.]+)/page/([0-9]+)/?$ topic.php?id=$2&page=$3 [L,QSA]
RewriteRule ^([^/.]+)/([^.]+)/?$ topic.php?id=$2 [L,QSA]RewriteRule ^([^/.]+)/page/([0-9]+)/?$ forum.php?id=$1&page=$2 [L,QSA]
RewriteRule ^([^/.]+)/?$ forum.php?id=$1 [L,QSA]
</IfModule>
Place the plugin file in my-plugin directory and .htaccess file in bbpress root directory. Active the plugin. and it should work fine.
The Problem I find with this.
- The Link to BBpress admin board link does not work from main site. It redirects to home page. You will need to manually type the link to go inside.
- In case you type something which does not exists as http://sitename.com/<bbpress-directory>/sdaksda it returns http://sitename.com/<bbpress-directory>// . An extra slash.
Except these 2 there is no problem I see so far but Its not easy to predict as I dont have lot of posts or users. So if you want to try it out, start reading here
Thanks! It works wonders. Running it now on the community site Callofduty.se. Your sh*t is the only EASY solution to this problem – thanks again!
(Running it with bbPress 1.01 if anyone would like to know)
Hi, I tried out your solution and it works fine. Thanks for it. I have only the 2 problems you described. Could you meanwhile find a way to solve this problems?
I found a solution for the admin-backend link!
Just ad the following code
RewriteRule ^bb-admin/$ – [L]
…before this code
RewriteRule ^([^.]+)/([^.]+)/page/([0-9]+)/?$ topic.php?id=$2&page=$3 [L,QSA]
….and it works!
Hi! After 3 hours of brute-force testing, I found a working configuration:
`
# BEGIN bbPress
Options -MultiViews
RewriteEngine On
RewriteBase /forum/
#handle admin stuff
RewriteRule ^bb-admin/.*$ – [L,QSA]
# handle the rest
RewriteRule ^page/([0-9]+)/?$ ?page=$1 [L,QSA]
RewriteRule ^profile/([^/]+)/page/([0-9]+)/?$ profile.php?id=$1&page=$2 [L,QSA]
RewriteRule ^profile/([^/]+)/([^/]+)/?$ profile.php?id=$1&tab=$2 [L,QSA]
RewriteRule ^profile/([^/]+)/([^/]+)/page/([0-9]+)/?$ profile.php?id=$1&tab=$2&page=$3 [L,QSA]
RewriteRule ^profile/([^/]+)/?$ profile.php?id=$1 [L,QSA]
RewriteRule ^profile/?$ profile.php [L,QSA] # added
RewriteRule ^rss/?$ rss.php [L,QSA]
RewriteRule ^rss/topics/?$ rss.php?topics=1 [L,QSA]
RewriteRule ^rss/forum/([^/]+)/?$ rss.php?forum=$1 [L,QSA]
RewriteRule ^rss/forum/([^/]+)/topics/?$ rss.php?forum=$1&topics=1 [L,QSA]
RewriteRule ^rss/topic/([^/]+)/?$ rss.php?topic=$1 [L,QSA]
RewriteRule ^rss/tags/([^/]+)/?$ rss.php?tag=$1 [L,QSA]
RewriteRule ^rss/tags/([^/]+)/topics/?$ rss.php?tag=$1&topics=1 [L,QSA]
RewriteRule ^rss/profile/([^/]+)/?$ rss.php?profile=$1 [L,QSA]
RewriteRule ^rss/view/([^/]+)/?$ rss.php?view=$1 [L,QSA]
RewriteRule ^tags/([^/]+)/page/([0-9]+)/?$ tags.php?tag=$1&page=$2 [L,QSA]
RewriteRule ^tags/([^/]+)/?$ tags.php?tag=$1 [L,QSA]
RewriteRule ^tags/?$ tags.php [L,QSA]
RewriteRule ^view/([^/]+)/page/([0-9]+)/?$ view.php?view=$1&page=$2 [L,QSA]
RewriteRule ^view/([^/]+)/?$ view.php?view=$1 [L,QSA]
# handle forums
RewriteRule ^([^/]+)/page/([0-9]+)/?$ forum.php?id=$1&page=$2 [L,QSA]
RewriteRule ^([^/]+)/$ forum.php?id=$1 [L,QSA] # no ‘?’ before the closing ‘$’ this time: very important!
# handle topics
RewriteRule ^([^/]+)/([^/]+)/page/([0-9]+)/?$ topic.php?id=$2&page=$3 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/$ topic.php?id=$2 [L,QSA] # no ‘?’ before the closing ‘$’ this time: very important!
# handle non-existent pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]
# END bbPress
`
I sent you a mail a couple of days ago regarding publishing the updated plugin, but I received no answer, so I made a plugin upload request today: “Nicer Permalinks” will be online soon! ^_^
Powerful post.
Thanks! I hope it will work just nice… Will try
Download where?