htaccess или редирект для скрытия части ссылки?

8 февр. 2011 г., 19:22:01
Просмотры: 834
Голосов: 1

У меня установлен плагин для ротации рекламы, который отображает несколько объявлений на моем сайте, но плагин запрограммирован так, что использует полный путь в ссылке для подсчета показов. Я хотел бы знать, есть ли простой способ скрыть часть ссылки через htaccess. Например:

http://mysite.com/wp-content/plugins/ad-rotating-plugin/rotate.php?trackerid=1

должно выглядеть как:

http://mysite.com/rotate.php?trackerid=1 (или любой другой вариант, главное чтобы не отображался полный путь wp-content/plugins/ в ссылке).

Я пробовал несколько плагинов, но не получил желаемого результата. Подводя итог: мне нужно чтобы ссылка ОТОБРАЖАЛАСЬ как вторая, но при нажатии перенаправляла на первую, при этом параметр trackerid=# должен сохранять сгенерированный ID. Можно ли это сделать через htaccess?

Спасибо!

0
Все ответы на вопрос 1
11

Что вам нужно сделать - это настроить пользовательский rewrite. Это позволит преобразовывать URL вида http://site.com/rotate/1 в http://site.com/wp-content/plugins/ad-rotating-plugin/rotate.php?trackerid=1

Вот непроверенный код, который может помочь:

<?php
/*
Plugin Name: Ваш плагин
Plugin URI: 
Description: 
Version: 0.1
Author: 
Author URI: 
*/

// Добавляем правило rewrite и сбрасываем правила при активации плагина
register_activation_hook( __FILE__, 'ad_rotate_activate' );
function ad_rotate_activate() {
    ad_rotate_rewrite();
    flush_rewrite_rules();
}

// Сбрасываем правила при деактивации плагина
register_deactivation_hook( __FILE__, 'ad_rotate_deactivate' );
function ad_rotate_deactivate() {
    flush_rewrite_rules();
}

// Создаем новое правило rewrite
add_action( 'init', 'ad_rotate_rewrite' );
function ad_rotate_rewrite() {
    add_rewrite_rule( 'rotate/([^/]+)','/wp-content/plugins/ad-rotating-plugin/rotate.php?trackerid=$matches[1]','top' );
}
8 февр. 2011 г. 20:41:11
Комментарии

Я попробовал добавить это в свой файл functions.php, но, кажется, ничего не произошло. Нужно ли мне сбросить постоянные ссылки? Или это должно быть отдельным файлом плагина?

RodeoRamsey RodeoRamsey
8 февр. 2011 г. 22:25:26

Код, который я написал выше, был написан как плагин... а не как код для вставки в файл functions.php... поскольку вы изначально работаете с плагином, я предполагал, что вы хотите включить код перезаписи в плагин. Но вам нужно хотя бы выполнить вызов add_rewrite_rule(), а затем сбросить правила перезаписи.

EAMann EAMann
8 февр. 2011 г. 22:43:27

@EAMann: Добавляет ли это правило в элемент rewrite_rules в wp_options? Я посмотрел код в wp-includes/rewrite.php и, будь я проклят, если смогу сказать точно, так это или нет. Если оно сохраняется, что предотвращает многократное сохранение этого правила? Любопытные умы хотят знать!

Peter Rowell Peter Rowell
9 февр. 2011 г. 00:23:31

@Peter add_rewrite_rule() добавляет правило в массив, который индексируется на основе регулярного выражения, определенного выше (rotate/([^/]+)). Поэтому его нельзя добавить несколько раз. Взгляните на метод add_rule() класса WP_Rewrite (/wp-includes/rewrite.php около строки 1797).

EAMann EAMann
9 февр. 2011 г. 00:32:42

@EAMann, спасибо за разъяснение. Так это будет работать как отдельный плагин, или мне нужно поместить это прямо в файлы используемого плагина? Я попробовал добавить его как отдельный плагин, но исходные ссылки не изменились. Я в основном фронтенд-дизайнер, поэтому все это для меня немного непривычно. Спасибо! :)

RodeoRamsey RodeoRamsey
9 февр. 2011 г. 00:35:38

Это не предназначено для изменения каких-либо ссылок. То, что делает перезаписыватель URL в WordPress, это сопоставляет запросы с одного URL на другой. Таким образом, запрос к http://site.com/rotate/1 фактически будет отображать контент с http://site.com/wp-content/plugins/ad-rotating-plugin/rotate.php?trackerid=1. Также у вас должны быть включены "человекопонятные" постоянные ссылки, иначе все это бессмысленно.

EAMann EAMann
9 февр. 2011 г. 00:40:00

@EAMann: Так что массив, в который он добавляется, никогда не записывается в базу данных, верно?

Peter Rowell Peter Rowell
9 февр. 2011 г. 00:45:24

@EAMann, да, у меня включены красивые постоянные ссылки, но мне нужно, чтобы URL-адреса перезаписывались при загрузке страницы или как-то маскировались, чтобы при загрузке страницы пользователи не ВИДЕЛИ длинную ссылку, а фактически видели короткую ссылку. Извините, если я был неясен.

RodeoRamsey RodeoRamsey
9 февр. 2011 г. 01:12:46

Насколько мне известно, нет.

EAMann EAMann
9 февр. 2011 г. 01:13:27

@eamann Мне нужно что-то похожее на это. Запрос перенаправляется на rotate.php, но я получаю $_GET['tracker']=$matches[1] вместо $_GET['tracker']=1. Сталкивались ли вы с такой проблемой? Есть какие-то предложения?

a_fan a_fan
29 авг. 2011 г. 17:11:36

@Affan Я не совсем понимаю, о чем вы спрашиваете. Пожалуйста, задайте новый вопрос с более подробным описанием...

EAMann EAMann
29 авг. 2011 г. 18:43:06
Показать остальные 6 комментариев