egos

Рейтинг
45
Регистрация
22.06.2016

P1otr, никогда не встречали?

/index.php?route=category/item

/go.php?url=http://example.com/

Если делать полный разбор строки параметров самостоятельно, то можно пожонглировать и ? c &.

anru:
Как правильно прописать перенаправление?

Например так:

RewriteRule ^(\d+)\.htm$ /?p=$1 [R=301,L]

Я позавчера по мотивам вашей темы написал статью о перенаправлении со сменой post_id на postname – все работает. Как появится немного свободного времени, может, и с категориями сделаю – нужно посмотреть, как они связаны с постами.

---------- Добавлено 03.11.2016 в 18:25 ----------

Попробуйте сделать внутреннее перенаправление (не указывайте флаг R=301) на index.php?p=$1, тогда, быть может, WP будет сам делать перенаправление на нужные вам адреса, как сказал SeVlad.

joost:
Нужно в значении переменной использовать знак ":"

Не нужно. Но можно.

Зачем делать два перенаправления? 500 штук – тяжеловато. Нужно сделать на отдельном сайте. Для этого существуют специальные скрипты. Если не найдете в открытом доступе, можно и написать – это не очень сложно.

Это вы, видимо, не поняли, что я написал. Я всего лишь сказал, что то, что вы показали, обычно делается более централизованным путем.

---------- Добавлено 01.11.2016 в 20:29 ----------

Существуют не слишком масштабные каркасы. Отдельная точка входа используется лишь в крайних случаях. Ничего сверхтяжеловесного в вашей задаче я не увидел. После первого обращения к миниатюре она будет сгенерирована скриптом и в дальнейшем отдаваться непосредственно сервером. Кстати, при первом обращении она тоже может отдаваться сервером – для этого у всех популярных серверов есть поддержка специальных неофициальных заголовков (на уровне ядра или расширений).

Это все обычно делается централизованно. В корне сайта размещается основной файл сайта с т.н. фронт-контроллером и .htaccess примерно такого типа:


RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* /index.php

Фронт-контроллер выполняет обращение к роутеру, по итогам которого запускается обработчик с параметром вроде images/upload/i180x180/image.jpg (первый элемент пути обычно используется для выбора самого обработчика; в созданных мной сайтах обычно и images нет, т.к. этот каталог размещается в корне сайта наравне с каталогом files и сам по себе может быть завязан на одноименный обработчик; upload обычно тоже по-другому использую). Параметр может быть не один, а являться совокупностью уже выделенных из показанной строки элементов: в последнем элементе находится краткое имя файла, в предпоследнем – требуемый формат. Вы можете заранее при загрузке разместить в соответствующей таблице БД нужные строки, чтобы самостоятельно не заниматься проверкой их корректности в момент обращения к файлу – ядро сайта самостоятельно сделает сверку и в случае несовпадения не будет вызывать соответствующий обработчик, а сразу выдаст ошибку.

Если кратко, вы можете во время загрузки файла не создавать дополнительные файлы, а лишь добавить соответствующие им записи в БД.

Можно хаком по маске ^\d+\.htm$ в .htaccess – решение с перенаправлением на /%postname%.htm я уже вижу. На /%category%/%postname%.htm скорее всего будет не намного сложнее, просто я с WP не очень хорошо знаком (поля id и post_name когда-то видел в таблице постов, а вот про категорию что-то не вспомню, но какая-то связь в любом случае должна быть).

sookhov, занимайтесь рубашками, у вас это лучше получается – у меня есть пара – нравятся. А в этом вопросе доверьтесь мнению специалистов. РАН в предыдущем посте все верно написал. Если уж так хочется сделать перенаправление на главную, используйте перенаправление на JavaScript по таймеру (причем я бы дал пользователю достаточно много времени перед срабатыванием перенаправления, чтобы вникнуть в суть произошедшего) и дополнительно выводите ссылку. Страница 404-ой может быть тоже достаточно информативна, так что делать перенаправление вовсе не обязательно.

---------- Добавлено 28.10.2016 в 19:45 ----------

P.S. А почему написание фамилии в домене и в бренде различается? Развод что ли?

Вот эта проверка бессмысленная:

if($link[0] == $result['seo_link'])

Вы еще в запросе попросили выдать вам запись с нужным значением $link[0]. Если соответствующее поле содержит уникальные значения, у вас в результате будет получена либо одна интересующая вас запись, либо ни одной. Замените подобную проверку на такую:

if ($result)

Можно даже прямо в условии написать так:

if ($result=mysqli_fetch_assoc($sql))

Семантика имен переменных немного странная. Чаще $sql обозначают текст запроса, а не его результат. Результат же обозначают $result. А то что вы получили в последней функции, это лишь одна запись из результата запроса, поэтому и название следовало бы подобрать подходящее.

---------- Добавлено 28.10.2016 в 15:46 ----------

barabash:
На звание профессионала в php я не претендую...
Это понятно, но в Web-программировании так делать не принято. Если с самого начала так будете писать, потом будет труднее переучиваться. Учитесь все с самого начала делать правильно. Всего хорошего.

Это еще мелочи, вы дальше посмотрите.

barabash, чередовать взаимодействие с БД и вывод разметки не следует. В народе это называется быдлокодингом. Профессионалы так не делают. В концовке вашего кода вывод заголовков тоже работать не будет, т.к. заголовки отправляются клиенту до начала вывода содержимого страницы. И вы уж определитесь, 404-ый статус вы выставляете или делаете перенаправление. Вместо последнего заголовка можете написать такой код:


readfile($_SERVER['DOCUMENT_ROOT'].'/404.html');
exit;

Функции с приставкой mysql официально считаются устаревшими. Результат большинства подобных функций нужно проверять. Вдруг у вас в результате выполнения запроса не было получено ни одной строки. Все входящие данные, включая элементы пути нужно строго фильтровать, прежде чем их использовать в запросах.

В $_SERVER['REQUEST_URI'] передается полный адрес, а вы судя по всему пытаетесь сделать разбор пути. Лучше отделите сначала строку параметров.

Всего: 58