P1otr, никогда не встречали?
/index.php?route=category/item
/go.php?url=http://example.com/
Если делать полный разбор строки параметров самостоятельно, то можно пожонглировать и ? c &.
Например так:
RewriteRule ^(\d+)\.htm$ /?p=$1 [R=301,L]
Я позавчера по мотивам вашей темы написал статью о перенаправлении со сменой post_id на postname – все работает. Как появится немного свободного времени, может, и с категориями сделаю – нужно посмотреть, как они связаны с постами.---------- Добавлено 03.11.2016 в 18:25 ----------Попробуйте сделать внутреннее перенаправление (не указывайте флаг R=301) на index.php?p=$1, тогда, быть может, WP будет сам делать перенаправление на нужные вам адреса, как сказал SeVlad.
Не нужно. Но можно.
Зачем делать два перенаправления? 500 штук – тяжеловато. Нужно сделать на отдельном сайте. Для этого существуют специальные скрипты. Если не найдете в открытом доступе, можно и написать – это не очень сложно.
Это вы, видимо, не поняли, что я написал. Я всего лишь сказал, что то, что вы показали, обычно делается более централизованным путем.---------- Добавлено 01.11.2016 в 20:29 ----------Существуют не слишком масштабные каркасы. Отдельная точка входа используется лишь в крайних случаях. Ничего сверхтяжеловесного в вашей задаче я не увидел. После первого обращения к миниатюре она будет сгенерирована скриптом и в дальнейшем отдаваться непосредственно сервером. Кстати, при первом обращении она тоже может отдаваться сервером – для этого у всех популярных серверов есть поддержка специальных неофициальных заголовков (на уровне ядра или расширений).
Это все обычно делается централизованно. В корне сайта размещается основной файл сайта с т.н. фронт-контроллером и .htaccess примерно такого типа:
RewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^.* /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, чередовать взаимодействие с БД и вывод разметки не следует. В народе это называется быдлокодингом. Профессионалы так не делают. В концовке вашего кода вывод заголовков тоже работать не будет, т.к. заголовки отправляются клиенту до начала вывода содержимого страницы. И вы уж определитесь, 404-ый статус вы выставляете или делаете перенаправление. Вместо последнего заголовка можете написать такой код:
readfile($_SERVER['DOCUMENT_ROOT'].'/404.html');exit;
Функции с приставкой mysql официально считаются устаревшими. Результат большинства подобных функций нужно проверять. Вдруг у вас в результате выполнения запроса не было получено ни одной строки. Все входящие данные, включая элементы пути нужно строго фильтровать, прежде чем их использовать в запросах.
В $_SERVER['REQUEST_URI'] передается полный адрес, а вы судя по всему пытаетесь сделать разбор пути. Лучше отделите сначала строку параметров.