You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用%符号时的.htaccess重写问题及VBSeo转XenForo重定向需求

Solution for Redirecting VBSEO URLs with Encoded @ to XenForo

Absolutely, you can solve this by combining rewrite rules (for Apache or Nginx) with a custom PHP script to handle the redirection logic. The issue here is that the encoded %40 (which decodes to @) causes problems with physical folders and direct 301s, but routing the request to a script lets you parse and redirect cleanly.

Step 1: Set Up Rewrite Rules

For Apache (using .htaccess)

Add these rules to your site's root .htaccess file (make sure mod_rewrite is enabled on your server):

RewriteEngine On

# Route all requests to the problematic VBSEO URL to your custom script
RewriteRule ^forums/title-%40-forum/(.*)$ /redirect-forum.php?old_path=$1 [L,QSA]
  • The ^forums/title-%40-forum/(.*)$ pattern matches any URL starting with that exact path, capturing everything after it into the old_path parameter.
  • [L,QSA] ensures this is the last rule processed and preserves any existing query strings from the original request.

For Nginx

Add this to your server block configuration:

location ~ ^/forums/title-%40-forum/(.*)$ {
    rewrite ^/forums/title-%40-forum/(.*)$ /redirect-forum.php?old_path=$1 last;
}
  • The last flag stops processing further rewrite rules and sends the request to the PHP script.

Step 2: Create the PHP Redirect Script

Create a file named redirect-forum.php in your site's root (adjust the path if needed) with this logic. Customize the URL mapping to match your XenForo structure:

<?php
// Capture the trailing path from the old URL (e.g., thread-456.html)
$oldPath = $_GET['old_path'] ?? '';

// Map old content paths to new XenForo URLs
if (empty($oldPath)) {
    // Redirect to the new forum's main page if no trailing path
    $newUrl = '/forums/your-new-forum-slug/';
} else {
    // Example: Parse old thread IDs from VBSEO URLs
    if (preg_match('/thread-(\d+)\.html/', $oldPath, $matches)) {
        $threadId = $matches[1];
        // XenForo's default thread URL format is /threads/[thread-id]/
        $newUrl = "/threads/{$threadId}/";
    } elseif (preg_match('/post-(\d+)\.html/', $oldPath, $matches)) {
        $postId = $matches[1];
        // Redirect to the specific post in XenForo
        $newUrl = "/posts/{$postId}/";
    } else {
        // Fallback to the forum main page for unrecognized paths
        $newUrl = '/forums/your-new-forum-slug/';
    }
}

// Send a permanent 301 redirect (best for SEO)
header("HTTP/1.1 301 Moved Permanently");
header("Location: {$newUrl}");
exit;
?>

Key Notes

  • Why this works: Rewrite rules bypass the server's attempt to find a physical folder (which fails because of the @ character) and instead send the request directly to your PHP script.
  • Customize the mapping: Adjust the regex patterns and $newUrl values to match how your old VBSEO URLs map to XenForo's URL structure. If you need to map more content types (like forums, articles), add additional conditions.
  • Test thoroughly: Use tools like curl -I [old-url] to verify the 301 response and ensure the redirect target is correct.

内容的提问来源于stack exchange,提问作者b747fp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:31:23