PHP Permalinks .. как изменить?

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

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

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

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

РЕДАКТИРОВАТЬ. Посмотрев на ваш файл .htaccess, строка 29 выглядит так, как будто это относится к статье permalinks, и она указывает на view.php и преобразует то, что было permalink в переменные GET id и title . view.php источник view.php если сможете, и мы пойдем оттуда.

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

Единственный намек в том, что файл 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 Противоположность import.php который использовался view.php )? Поместите источник этого файла, поскольку он, вероятно, имеет функцию кодирования.

EDIT 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 заключается в том, что первые echoseo_clean_titles2 из результата, в то время как второе return s это. Однако все три имеют строку $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 

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

Функция 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 .