Если у вас есть 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
Это должно сделать это!