У меня есть требование от клиента выполнить некоторые конкретные перенаправления (часть списания старого сервера на новый). Я бился об это головой, и это сводит меня с ума!
Фактически, мне нужно сделать две модификации .htaccess одновременно. Я ожидаю, что это будет что-то действительно простое, но я перепробовал все, что мог придумать, так что пора спросить совета.
Мне нужно сделать следующее:
Чтобы еще больше усложнить, это повторяется из-за того, что веб-ресурсы могут находиться в разных местах новой папки (newfolder1, newfolder2, newfolder3).
На данный момент мой сегмент .htaccess выглядит так:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond "%{DOCUMENT_ROOT}/oldfolder/%{REQUEST_URI}" -f
RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/newfolder1/$1" [L]
RewriteCond "%{DOCUMENT_ROOT}/oldfolder/%{REQUEST_URI}" -f
RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/newfolder2/$1" [L]
RewriteCond "%{DOCUMENT_ROOT}/oldfolder/%{REQUEST_URI}" -f
RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/newfolder3/$1" [L]
RewriteRule "^" "-" [PT]
Это отлично работает для перенаправления папки но это работает только если какой-то веб-ресурс еще не содержит .html.
Я пытался:
RewriteRule "%{REQUEST_URI}[^.html]" "%{DOCUMENT_ROOT}/newfolder1/$1" [L]
RewriteRule "^(.*).html$" "%{DOCUMENT_ROOT}/newfolder1/$1" [L]
и много вариаций на этот счет, но я никуда не денусь.
Итак, как оказалось, Wordpress (новая система) сделает большую часть тяжелой работы со мной, и я лаял не на то дерево.
В Старый URL (http://example.com/oldfolder/some-web-resource.html) имеет расширение html, и из-за ошибки я понял, что это единственное, что мне нужно изменить - Wordpress заменит 'имя папки' для меня как часть проверки «да, у вас плохой URL-адрес, дружище» .
Итак, мое исправление было таким простым, как добавление следующей строки в верхнюю часть файла .htaccess: RedirectMatch "^(/oldfolder/.*).html" "$1"
Это сейчас, если запрошенный URL http://example.com/oldfolder/blah.html, выполнит 301 редирект, используя http://example.com/oldfolder/blah а затем Wordpress сделает все остальное, изменив при необходимости на newfolder1, newfolder2, newfolder3 и т. д. на основе оставшейся части запрашиваемого URI.
Вы поверите, что мне потребовалось 4 часа, чтобы понять?