PHP Постоянные ссылки .. как изменить? - PullRequest
1 голос
/ 24 января 2010

Я создал клиентский сайт с недавно купленным php-скриптом, и поддержка скрипта жалкая, я хочу, чтобы постоянные ссылки скрипта были дружественными для поисковых систем, но это не так. Между ними есть пробелы, которые вообще не индексируются поисковой системой.

Итак, как я могу изменить постоянные ссылки? Спасибо всем ..

Ответы [ 2 ]

1 голос
/ 25 января 2010

Если у вас есть 50 файлов PHP и файл .htaccess, которые поставляются с этим «сценарием», вам, скорее всего, сначала нужно найти путь программирования, который проходит через них. Если вы посмотрите на файл .htaccess, вы должны увидеть несколько строк ModRewrite, которые должны заканчиваться именем файла PHP. Это скрипт, который получает (и декодирует) постоянные ссылки. Этот файл был бы хорошим местом для поиска хука для перезаписи структуры постоянных ссылок. Если бы вы могли опубликовать исходный код (или поместить его где-нибудь как pastebin и опубликовать ссылку) для этого файла, я был бы рад взглянуть.

Из одного из ваших комментариев кажется, что по крайней мере часть скрипта использует PHP 100 * * Smarty . Если это так, если вы можете найти папку, которая содержит папки «cache», «templates» и «templates_c» (или аналогичные), вы можете исключить и эту; это будут шаблоны, используемые для отображения страницы, а не сценарии декодирования / кодирования.

РЕДАКТИРОВАТЬ: Глядя на ваш файл .htaccess, строка 29 ищет тот, который имеет дело с постоянными ссылками статьи, и он указывает на view.php, и конвертирует то, что было постоянной ссылкой в ​​id и title ПОЛУЧИТЬ переменные. Разместите источник view.php, если можете, и мы оттуда пойдем.

РЕДАКТИРОВАТЬ 2 Хорошо, глядя на view.php получил немного больше понимания. Главным из которых является то, что нет функции декодирования; обработчик ответов быстро отбрасывает часть заголовка постоянной ссылки и ищет вопрос только по его идентификатору (номеру, следующему за каналом запроса URL; вы можете доказать это на демонстрационной странице, изменив часть заголовка URL на что угодно еще, и он все равно будет получать нужную страницу). Итак, хорошая новость в том, что нет функции декодирования, которую нужно обновлять при изменении функции кодирования. К сожалению, это очень мало говорит нам о том, где находится функция кодирования в скриптах.

Единственный намек на то, что файл view.php содержит файл с именем include/functions/import.php, который, как я предполагаю, содержит определения функций для does_post_exist($PID), update_last_viewed($PID), update_your_viewed($USERID) и update_viewcount_question($PID). Давайте посмотрим на источник этого файла, чтобы увидеть, есть ли там какие-либо другие функции, которые будут использоваться для импорта. Кроме того, сколько файлов находится в папке include/functions/? Если есть только несколько, опубликуйте все их источники; скорее всего, там определена функция кодирования. Если есть куча, есть ли файл export.php в этой папке (то есть, противоположный import.php, который использовался view.php)? Опубликуйте источник этого файла, так как он, вероятно, имеет функцию кодирования.

РЕДАКТИРОВАТЬ 3 Вот они: в файле main.php есть три функции: seo_clean_titles, insert_seo_clean_titles и seo_clean_titles2. insert_seo_clean_titles - это функция, вызываемая из шаблона Smarty (ищите все файлы с расширением .tpl для {insert name="seo_clean_titles", чтобы узнать, где она используется), а разница между seo_clean_titles и seo_clean_titles2 заключается в том, что первый echo выводит результат, а второй return - результат. Однако у всех трех есть строка $title = str_replace(" ", "-", $title);, которая должна превращать все пробелы в названии в дефисы. Если вы не видите этого результата, скорее всего, код не вызывает эти функции в нужных местах. Вы можете выполнить поиск по всем .php файлам и посмотреть, есть ли где-нибудь еще вызов seo_clean_titles или seo_clean_titles2, и убедиться, что результат фактически используется в качестве окончательного URL.

Редактировать 4 Чтобы добавить «.html» в конец всех URL: Вот строка в файле шаблона, ссылающаяся на страницу вопроса:

<a href="{$baseurl}/{$ques[i].seo}/{$title}|{$ques[i].PID}">{$ques[i].title|stripslashes}</a>

Измените это на:

<a href="{$baseurl}/{$ques[i].seo}/{$title}|{$ques[i].PID}.html">{$ques[i].title|stripslashes}</a>

и ссылки будут иметь ".html" в конце. Затем вам нужно будет изменить view.php, чтобы снова убрать «.html» при разборе идентификационного номера: перед $pid = intval($ph); введите следующее:

if (strtolower(substr($pid, -5)) == ".html") $pid = substr($pid,0,-5); // Remove ".html" if it exists

Это должно сделать это!

0 голосов
/ 24 января 2010

Функция urlencode позаботится о пробелах в URL.

Например:

<?php
$base_url = 'http://example.com';
$category = urlencode('some thing');
$item     = urlencode('Name of an item');

echo "<a href=\"{$base_url}/{$category}/{$item}/>{$item}</a>";
?>

Это сделало бы ссылку http://example.com/some+thing/Name+of+an+item/, с которой должна работать поисковая система.

И, если вы используете перезапись URL (например, mod_rewrite), значения должны достигнуть вашего PHP-скрипта так же, как и до функции urlencode. Если нет, вы можете вернуть их обратно с помощью urldecode .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...