Это для проекта. Мне нужно перенаправить определенные входящие запросы URL на файлы, размещенные на том же веб-сервере. Я не могу использовать .htaccess и не могу полагаться ни на какие плагины.
Мне удалось сделать это с помощью плагина, но мне трудно извлечь необходимый код, чтобы написать свой собственный плагин, который делает то, что мне нужно, жестко закодированным.
Весь софт обновлен
Плагин WordPress «Перенаправление» (успешно)
Я нашел код в документации Pantheon:
$blog_id = get_current_blog_id();
// You can easily put a list of many 301 url redirects in this format
// Trailing slashes matters here so /old-url1 is different from /old-url1/
$redirect_targets = array(
'/test/test.xml' => '/files/' . $blog_id . '/test.xml',
'/regex/wildcard.xml(.*)' => '/files/' . $blog_id . '/regex.xml',
);
if ( (isset($redirect_targets[ $_SERVER['REQUEST_URI'] ] ) ) && (php_sapi_name() != "cli") ) {
echo 'https://'. $_SERVER['HTTP_HOST'] . $redirect_targets[ $_SERVER['REQUEST_URI'] ];
header('HTTP/1.0 301 Moved Permanently');
header('Location: https://'. $_SERVER['HTTP_HOST'] . $redirect_targets[ $_SERVER['REQUEST_URI'] ]);
if (extension_loaded('newrelic')) {
newrelic_name_transaction("redirect");
}
exit();
}
https://example.com/test/test.xml успешно
перенаправляет на
/файлы/5/текст.xml
Однако некоторые входящие запросы содержат строку запроса, например.
https://example.com/regex/wildcard.xml?somequerystring
очевидно, редирект с
https://example.com/regex/wildcard.xml
к
/файлы/5/regex.xml
работает отлично.
Однако, как только задействована строка запроса, перенаправление не работает. Учитывая, что мне нужно сделать это с помощью PHP, как я могу добиться перенаправления с подстановочным знаком с /regex/* или /regex/wildcard.xml* на /files/5/regex.xml?
Любая помощь будет принята с благодарностью.
Спасибо, Даниэль
Спасибо! К сожалению, я не думаю, что это действительно относится к моей проблеме. По сути, все, что мне нужно, это выяснить, как сформулировать подстановочный знак в php: '/regex/wildcard.xml(.*)' => '/files/' . $блог_id . '/regex.xml',
Если это поможет, вот как мне удалось это сделать с помощью плагина: Howarddc.com/understanding-redirection-regular-expressions "Создание перенаправлений с подстановочными знаками"
Проверьте с помощью любого плагина перенаправления URL
Написал им, пока ответа нет и просто по коду не могу понять.
Вы хотите перенаправить example.com/regex/wildcard.xml?somequerystring на example.com/files/5/regex.xml, пропустив строку запроса?
да именно так!





Если вы предпочитаете сохранить логику кода и просто заставить код работать, попробуйте следующее:
$blog_id = get_current_blog_id();
$redirect_targets = array(
'/wordpress/test/test\.xml/i' => 'files/'.$blog_id.'/test.xml',
'/([^/]+)/([^/]+)\.xml.*/i' => 'files/'.$blog_id.'/$1.xml',
);
// Get reuest uri without GET attributes.
$request_uri = get_request_uri();
// Loop through redirect rules.
foreach ($redirect_targets as $pattern => $redirect) {
// If matched a rule, then create a new redirect URL
if ( preg_match( $pattern, $request_uri ) ) {
$new_request_uri = preg_replace( $pattern, $redirect, $request_uri );
$new_url = 'https://'.$_SERVER['HTTP_HOST'].$new_request_uri;
header( 'HTTP/1.0 301 Moved Permanently' );
header( 'Location: '.$new_url );
if ( extension_loaded( 'newrelic' ) ) {
newrelic_name_transaction( "redirect" );
}
exit();
}
}
// Returns REQUEST URI without 'get' arguments
// if example.com/test/test.php?some=arg it will return test/test.php
function get_request_uri () {
return strtok( $_SERVER['REQUEST_URI'], '?' );
}
Вы можете изменить правило перенаправления по своему усмотрению. Он работает как обычный шаблон Regex.
Попробуйте эту статью один раз stackoverflow.com/questions/768431/…