XF 2.0 Moving site from /forum to root

PJK

Active member
13 years ago on vBulletin I had a forum, and then moved it to XF in the last few years. I put the XF in /forum to build out a homepage at the root and develop it. However, after testing a lot of various things, I've decided that using a Portal plugin and putting the portal as the homepage is the best way forward. This would mean putting the XF install at the root instead of /forum. However, I'm concerned that if I make this change it will mess up all the old link redirects I have setup (there are quite a few from the vB days). What suggestions do you have here to avoid creating tons of broken links? Thanks.
 
Thanks, so I'd need to add this rewrite rule to fix the /forum to / URLs:
RewriteRule ^forum/(.*)?$ /$1 [R=301,L]

However, I'm concerned that all the old vB URL redirects that currently redirect a bunch of older links to /forum will no longer work when I move to the root. The current ,htaccess in the forum root looks like:
Code:
Options +FollowSymLinks
RewriteEngine On
# post redirect
#RewriteCond %{QUERY_STRING} (^|&|\?)p=([0-9]+)($|&)
#RewriteRule ^showthread\.php$ /forum/posts/%2/? [R=301,L]
# thread redirect
#RewriteCond %{QUERY_STRING} (^|\?)([0-9]+)$
#RewriteRule ^showthread\.php$ /forum/threads/%2/? [R=301,L]
RewriteBase /forum
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*) https://www.domain.com/forum/$1 [R=301,L]

#RewriteCond %{HTTP_HOST} ^domain\.com
#RewriteRule ^(.*)$ https://www.domain.com/forum/$1 [R=permanent,L]
#RewriteRule ^(.*)/(styleid=(.*))$ showthread.php?&%{QUERY_STRING} [L]
#RewriteRule ^(.*)/(showthread\.php)$ showthread.php?&%{QUERY_STRING} [L]
#RewriteRule ^(.*)/t-(.*)-(.*)-new.html showthread.php?t=$3&goto=newpost&%{QUERY_STRING} [L]
#RewriteRule ^(.*)/t-(.*)-(.*)-last.html showthread.php?t=$3&goto=lastpost&%{QUERY_STRING} [L]
#RewriteRule ^(.*)/t-(.*)-(.*)-print.html/(.*)$ printthread.php?t=$3&%{QUERY_STRING}&is_vrewrite=yes [L]
#RewriteRule ^(.*)/t-(.*)-(.*)-print.html printthread.php?t=$3&is_vrewrite=yes&%{QUERY_STRING} [L]
#RewriteRule ^(.*)/t-(.*)-(.*)-nextnewest.html showthread.php?t=$3&goto=nextnewest&is_vrewrite=yes&%{QUERY_STRING} [L]
#RewriteRule ^(.*)/t-(.*)-(.*)-nextoldest.html showthread.php?t=$3&goto=nextoldest&is_vrewrite=yes&%{QUERY_STRING} [L]
#RewriteRule ^p-(.*)-post(.*)/postcount(.*).html showpost.php?p=$2&postcount=$3&is_vrewrite=yes&%{QUERY_STRING} [L]
#RewriteRule ^(.*)/t-(.*)-(.*)-page(.*).html showthread.php?t=$3&page=$4&is_vrewrite=yes&%{QUERY_STRING} [L]
#RewriteRule ^(.*)/t-(.*)-(.*)/page(.*).html showthread.php?t=$3&page=$4&is_vrewrite=yes&%{QUERY_STRING} [L]
#RewriteRule ^(.*)/t-(.*)-(.*).html/(.*)$ showthread.php?t=$3&%{QUERY_STRING}&is_vrewrite=yes [L]
#RewriteRule ^(.*)/t-(.*)-(.*).html showthread.php?t=$3&is_vrewrite=yes&%{QUERY_STRING} [L]
#RewriteRule ^f-(.*)-(.*)/misc\.php$ misc.php?&%{QUERY_STRING}&is_vrewrite=yes&%{QUERY_STRING} [L]
#RewriteRule ^members/(.*)-(.*).html member.php?u=$2&is_vrewrite=yes&%{QUERY_STRING} [L]
#RewriteRule ^u-(.*)-(.*).html(.*) member.php?u=$2&is_vrewrite=yes&%{QUERY_STRING}$3 [L]
#RewriteRule ^u-(.*)-(.*).html member.php?u=$2&is_vrewrite=yes&%{QUERY_STRING} [L]
#RewriteRule ^f-(.*)-(.*)/page(.*).html/(.*)$ forumdisplay.php?f=$2&&page=$3%{QUERY_STRING}&is_vrewrite=yes [L]
#RewriteRule ^f-(.*)-(.*)/(.*)$ forumdisplay.php?f=$2&&%{QUERY_STRING}&is_vrewrite=yes [L]
#RewriteRule ^f-(.*)-(.*)/$ forumdisplay.php?f=$2&%{QUERY_STRING}&is_vrewrite=yes [L]
#RewriteRule ^search-(.*).html$ search.php?do=$1 [L]

#    Mod_security can interfere with uploading of content such as attachments. If you
#    cannot attach files, remove the "#" from the lines below.
#<IfModule mod_security.c>
#    SecFilterEngine Off
#    SecFilterScanPOST Off
#</IfModule>
 
ErrorDocument 401 default
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 500 default
 
<IfModule mod_rewrite.c>
    RewriteEngine On
 
    #    If you are having problems with the rewrite rules, remove the "#" from the
    #    line that begins "RewriteBase" below. You will also have to change the path
    #    of the rewrite to reflect the path to your XenForo installation.
    #RewriteBase /forum
 
    #    This line may be needed to enable WebDAV editing with PHP as a CGI.
    #RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
</IfModule>

# Wordfence WAF
<IfModule mod_php5.c>
    php_value auto_prepend_file none
</IfModule>
<Files ".user.ini">
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
    Order deny,allow
    Deny from all
</IfModule>
</Files>

# END Wordfence WAF

And I also have the XenForo Redirects for vBulletin 1.1.1 addon which currently redirects a bunch of those old vB URLs to the /forum.

Considering all of these things working now, can you suggest the best way to make this transition smooth and ensure all redirects work okay to the new root? Thanks
 
You don't need to do all that.

Just move all the files into your domain root and then change the forum URL at

AdminCP >> Setup >> Options >> Basic Board Information >> Board URL: https://yourdomain.com

Then if you haven't already done so install this Xenforo addon: XenForo Redirects for vBulletin | XenForo community. That will automatically take care of redirecting all the old vBulletin URLs and you can pretty much delete most of what you have in that .htaccess file.

It works quietly behind the scenes and does the job very well. I have it running on two old vBulletin forums.
 
  • Like
Reactions: PJK
Thanks, so I'd need to add this rewrite rule to fix the /forum to / URLs:
RewriteRule ^forum/(.*)?$ /$1 [R=301,L]

Alternatively you can just keep the /forum/ with nothing in it apart from its own .htaccess redirecting everything that lands there back to the root:

Code:
RewriteEngine On

RewriteRule ^(.*)$ /$1 [R=301,L]

This may not be such a "correct" way but it works.

However, I'm concerned that all the old vB URL redirects that currently redirect a bunch of older links to /forum will no longer work when I move to the root. The current ,htaccess in the forum root looks like:

That htaccess is mostly full of stuff doing nothing.

Any line tarting with # is disabled.

The Wordfence stuff is to do with Wordpress I believe so that is a bit weird.Were you at some time running Wordpress in the same directory as Xenforo?
 
  • Like
Reactions: PJK
Thanks guys for the feedback, I've went ahead and made the change and updated the htaccess, here is the updated one. Everything seems to be working okay, can you double check this looks alright? Thanks again.
Code:
Options +FollowSymLinks
RewriteEngine On
# post redirect
#RewriteCond %{QUERY_STRING} (^|&|\?)p=([0-9]+)($|&)
#RewriteRule ^showthread\.php$ /forum/posts/%2/? [R=301,L]
# thread redirect
#RewriteCond %{QUERY_STRING} (^|\?)([0-9]+)$
#RewriteRule ^showthread\.php$ /forum/threads/%2/? [R=301,L]
#RewriteBase /forum
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*) https://www.domain.com/$1 [R=301,L]

RewriteRule ^forum/(.*)?$ /$1 [R=301,L]

#    Mod_security can interfere with uploading of content such as attachments. If you
#    cannot attach files, remove the "#" from the lines below.
#<IfModule mod_security.c>
#    SecFilterEngine Off
#    SecFilterScanPOST Off
#</IfModule>
 
ErrorDocument 401 default
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 500 default
 
<IfModule mod_rewrite.c>
    RewriteEngine On
 
    #    If you are having problems with the rewrite rules, remove the "#" from the
    #    line that begins "RewriteBase" below. You will also have to change the path
    #    of the rewrite to reflect the path to your XenForo installation.
    #RewriteBase /forum
 
    #    This line may be needed to enable WebDAV editing with PHP as a CGI.
    #RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
</IfModule>
 
Top Bottom