Правило перезаписи htaccess - vBulletin to SMF
Недавно я перенес форум с vBulletin на SMF, и у меня возникли проблемы с созданием RewriteCond/RewriteRule, который преобразует URL http://www.fjcc.com.au/showthread.php?t=3133&page=2 в URL http://fjcc.com.au/forum_fjcc/index.php?topic=3133.0.
Файл.htaccess в корневом каталоге выглядит следующим образом:
RewriteEngine On
# SMF Rewrite rules for vBulletin links after vBSEO removed
RewriteCond %{QUERY_STRING} ^t=([0-9]+)&page=[0-9]+/?$
RewriteRule ^showthread.php$ /forum_fjcc/index.php?topic=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^t=([0-9]+).*&p=([0-9]+)/?$
RewriteRule ^showthread.php$ /forum_fjcc/index.php?topic=%1.msg%2#msg%2 [L,R=301]
RewriteCond %{QUERY_STRING} ^t=([0-9]+)/?$
RewriteRule ^showthread.php$ /forum_fjcc/index.php?topic=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^f=([0-9]+)&page=[0-9]+/?$
RewriteRule ^forumdisplay.php$ /forum_fjcc/index.php?board=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^f=([0-9]+)/?$
RewriteRule ^forumdisplay.php$ /forum_fjcc/index.php?board=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^do=newthread.f=([0-9]+)/?$
RewriteRule ^newthread.php$ /forum_fjcc/index.php?board=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^r=author/([0-9]+)-.*/?$
# SMF Rewrites for cms directory
RewriteRule ^cms/list.php$ /forum_fjcc/index.php?action=profile;u=%1 [L,R=301]
RewriteCond %{QUERY_STRING} ^t=([0-9]+)&page=[0-9]+/?$
# SMF Rewrites for forum directory
RewriteCond %{QUERY_STRING} ^t=([0-9]+)&page=[0-9]+/?$
RewriteRule ^forum/showthread.php$ /forum_fjcc/index.php?topic=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^t=([0-9]+).*&p=([0-9]+)/?$
RewriteRule ^forum/showthread.php$ /forum_fjcc/index.php?topic=%1.msg%2#msg%2 [L,R=301]
RewriteCond %{QUERY_STRING} ^t=([0-9]+)/?$
RewriteRule ^forum/showthread.php$ /forum_fjcc/index.php?topic=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^f=([0-9]+)&page=[0-9]+/?$
RewriteRule ^forum/forumdisplay.php$ /forum_fjcc/index.php?board=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^f=([0-9]+)/?$
RewriteRule ^forum/forumdisplay.php$ /forum_fjcc/index.php?board=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^do=newthread.f=([0-9]+)/?$
RewriteRule ^forum/newthread.php$ /forum_fjcc/index.php?board=%1.0 [L,R=301]
# SMF Rewrite rules for vBulletin links before vBSEO removed
RewriteRule ^f[\d]+/.+-([\d]+).*/index([\d]+).html/?$ /forum_fjcc/index.php?topic=$1.0 [L,R=301]
RewriteRule ^f([\d]+)/index([\d]+).html/?$ /forum_fjcc/index.php?board=$1.0 [L,R=301]
RewriteRule ^f[\d]+/.+-([\d]+)-post([\d]+)/?$ /forum_fjcc/index.php?topic=$1.msg$2#msg$2 [L,R=301]
RewriteRule ^f[\d]+/.+-([\d]+).*/?$ /forum_fjcc/index.php?topic=$1.0 [L,R=301]
RewriteRule ^f([\d]+)/?$ /forum_fjcc/index.php?board=$1.0 [L,R=301]
RewriteRule ^archive/index.php/t-([\d]+).*html/?$ /forum_fjcc/archive2.php?topic=$1.0 [L,R=301]
RewriteRule ^archive/index.php/f-([\d]+).*html/?$ /forum_fjcc/archive2.php?board=$1.0 [L,R=301]
RewriteRule ^archive/index.php/?$ /forum_fjcc/archive2.php [L,R=301]
RewriteRule ^members/([\d]+).html/?$ /forum_fjcc/index.php?action=profile;u=$1 [L,R=301]
Redirect 301 /index.php /forum_fjcc/
Redirect 301 /forum/showthread.php /forum_fjcc/index.php
Redirect 301 /showthread.php /forum_fjcc/index.php
Redirect 301 /blog/entry.php /forum_fjcc/index.php
Redirect 301 /entry.php /forum_fjcc/index.php
Redirect 301 /blog/blog.php /forum_fjcc/index.php
Redirect 301 /blog.php /forum_fjcc/index.php
Redirect 301 /cms/content.php /forum_fjcc/index.php
Redirect 301 /forum/ /forum_fjcc/index.php
Согласно MWL htaccess Tester, правила должны возвращать URL-адрес, который я перечислил выше, но этого не происходит - вместо этого я получаю /forum_fjcc/index.php?t=3133&page=2 (с префиксом URL-адреса веб-сайта).
Я работал над этой проблемой более недели и пробовал каждую найденную комбинацию RewriteCond/RewriteRule, но безуспешно, надеясь, что кто-то может указать мне правильное направление.
1 ответ
Я наконец разобрался с этим для себя (и успешно консолидировал несколько наборов RewriteCond/RewriteRule в процессе)
Проблема заключалась в операторе "Redirect 301 /showthread.php /forum_fjcc/index.php" (хотя я не понимаю, почему, потому что оператор для перезаписи URL-адреса встречался ранее в файле и имел флаги [L,R=301] в конце).
Мой рабочий файл.htacecss теперь выглядит так:
# SMF rewrites for vBulletin after vBSEO removed (including forum directory)
RewriteCond %{QUERY_STRING} ^t=([0-9]+)&page=[0-9]+&p=([0-9]+)#[0-9]+(.*)?/?$ [OR]
RewriteCond %{QUERY_STRING} ^t=([0-9]+)&page=[0-9]+&p=([0-9]+)(.*)?/?$
RewriteRule ^(forum)?/?showthread.php$ /forum_fjcc/index.php?topic=%1.msg%2#msg%2 [L,R=301]
RewriteCond %{QUERY_STRING} ^t=([0-9]+)&page=[0-9]+(.*)?/?$ [OR]
RewriteCond %{QUERY_STRING} ^t=([0-9]+)(.*)?/?$
RewriteRule ^(forum)?/?showthread.php$ /forum_fjcc/index.php?topic=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^f=([0-9]+)&page=[0-9]+(.*)?/?$ [OR]
RewriteCond %{QUERY_STRING} ^f=([0-9]+)(.*)?/?$
RewriteRule ^(forum)?/?forumdisplay.php$ /forum_fjcc/index.php?board=%1.0 [L,R=301]
RewriteCond %{QUERY_STRING} ^do=newthread.f=([0-9]+)(.*)?/?$
RewriteRule ^(forum)?/?newthread.php$ /forum_fjcc/index.php?board=%1.0 [L,R=301]
# SMF rewrites for vBulletin before vBSEO removed
RewriteRule ^f[\d]+/.+-([\d]+).*/index([\d]+).html/?$ /forum_fjcc/index.php?topic=$1.0? [L,R=301]
RewriteRule ^f([\d]+)/index([\d]+).html/?$ /forum_fjcc/index.php?board=$1.0? [L,R=301]
RewriteRule ^f[\d]+/.+-([\d]+)-post([\d]+)/?$ /forum_fjcc/index.php?topic=$1.msg$2#msg$2? [L,R=301]
RewriteRule ^f[\d]+/.+-([\d]+).*/?$ /forum_fjcc/index.php?topic=$1.0? [L,R=301]
RewriteRule ^f([\d]+)/?$ /forum_fjcc/index.php?board=$1.0? [L,R=301]
RewriteRule ^archive/index.php/t-([\d]+).*html/?$ /forum_fjcc/archive2.php?topic=$1.0? [L,R=301]
RewriteRule ^archive/index.php/f-([\d]+).*html/?$ /forum_fjcc/archive2.php?board=$1.0? [L,R=301]
RewriteRule ^archive/index.php/?$ /forum_fjcc/archive2.php? [L,R=301]
RewriteRule ^members/([\d]+).html/?$ /forum_fjcc/index.php?action=profile;u=$1? [L,R=301]
# SMF rewrite for cms author
RewriteCond %{QUERY_STRING} ^r=author/([0-9]+)-.*/?$
RewriteRule ^cms/list.php$ /forum_fjcc/index.php?action=profile;u=%1? [L,R=301]
# SMF rewrite for calendar
RewriteRule ^calendar\.php /forum_fjcc/index.php?action=calendar? [L,R=301]
# Other rewrites
Rewrite ^blog\.php /forum_fjcc/index.php? [L,R=301]
Rewrite ^index\.php /forum_fjcc/index.php? [L,R=301]
Rewrite ^entry\.php /forum_fjcc/index.php? [L,R=301]
Rewrite ^showthread\.php /forum_fjcc/index.php? [L,R=301]
Rewrite ^blog/blog\.php /forum_fjcc/index.php? [L,R=301]
Rewrite ^blog/entry\.php /forum_fjcc/index.php? [L,R=301]
Rewrite ^cms/content\.php /forum_fjcc/index.php? [L,R=301]
Rewrite ^forum/ /forum_fjcc/index.php? [L,R=301]