[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как преобразовать post.php?id=1 в post/1 ? [ЧПУ]
Страницы: 1, 2, 3, 4
bybad
Товарищи, подскажите пожалуйста как преобразовать с помощью .htaccess и mod_rewrite адрес post.php?id=1 в post/1.

Пробовал по разному и вот чего я добился на данный момент.

В файле .htaccess написано:

RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ post.php?id=$1 [L]

ErrorDocument 404 http://site.ru/error404.php
ErrorDocument 403 http://site.ru/error403.php


и это позволяет использовать короткий адрес типа http://site.ru/1, но если я добавляю post/

RewriteRule ^post/(.*)$ post.php?id=$1 [L]


по запросу http://site.ru/post/1 у меня сразу появляется ошибка 404.

Подскажите пожалуйста, как из post.php?id=1 получить post/1.

Папки с названием post на сервере нету.
Ramzes_Ra
а если так
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

Получится post?id=1, скорее то же, отсутствие .php работает со всеми страницами идеально.

Далее конкретно с твоим примером. попробую и если получится напишу
bybad
Цитата (Ramzes_Ra @ 30.08.2013 - 21:48)
а если так
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ .php

Получится post?id=1, скорее то же, отсутствие .php работает со всеми страницами идеально.

Далее конкретно с твоим примером. Сейчас попробую у себя и если получится напишу

На другом своём сайте я добавил расширение .php к

RewriteRule ^(.*).php$ post.php?id=$1 [L]


и все мои страницы имеют вид ЧПУ, вроде http://site.ru/nekotorye-vyvody.php, где nekotorye-vyvody подставляются из БД. Реализация наверное не самая правильная, тем не менее меня устраивает, но сейчас нужно кровь из носа сделать "подкатегорию", что бы выглядело так:

http://site.ru/interesnye-fakty/nekotorye-vyvody.php

Есть идеи?
Ramzes_Ra
Цитата
из post.php?id=1 получить post/1

RewriteRule ^(\w+)$ ?id=$1 [L]

Цитата
что бы выглядело так:
http://site.ru/interesnye-fakty/nekotorye-vyvody.php

Не понял про вторую запись о_О
bybad
Цитата (Ramzes_Ra @ 31.08.2013 - 07:59)
Цитата
из post.php?id=1 получить post/1

RewriteRule ^(\w+)$ ?id= [L]


Нет, почему то не работает.
Ramzes_Ra
Цитата (bybad @ 31.08.2013 - 08:39)
Цитата (Ramzes_Ra @ 31.08.2013 - 07:59)
Цитата
из post.php?id=1 получить post/1

RewriteRule ^(\w+)$ ?id= [L]


Нет, почему то не работает.

ааа не то скопировал
RewriteRule ^post/([^/]+)/?$ post.php?id=$1 [L]
bybad
Цитата (Ramzes_Ra @ 31.08.2013 - 09:13)
ааа не то скопировал
RewriteRule ^post/([^/]+)/?$ post.php?id= [L]

Все ровно выдаёт ошибку 404. Я даже попробовал флаг немного изменить - добавил QSA, но и это ничего не дало. Вычитал где-то что если использовать конструкцию [QSA,L], тогда ЧПУ сможет принимать GET запросы.

В общем пока задача не решена - есть ещё какие-нибудь мысли ?
Ramzes_Ra
Цитата (bybad @ 31.08.2013 - 09:53)
Цитата (Ramzes_Ra @ 31.08.2013 - 09:13)
ааа не то скопировал
RewriteRule ^post/([^/]+)/?$ post.php?id= [L]

Все ровно выдаёт ошибку 404. Я даже попробовал флаг немного изменить - добавил QSA, но и это ничего не дало. Вычитал где-то что если использовать конструкцию [QSA,L], тогда ЧПУ сможет принимать GET запросы.

В общем пока задача не решена - есть ещё какие-нибудь мысли ?

погоди погоди, это не может не работать, у меня работает. Поставь полностью .htaccess как у меня
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^post/([^/]+)/?$ post.php?id=$1 [L]
и введи http://site.ru/post/1
bybad
Ramzes_Ra, сделал как вы сказали, теперь вместо моей ошибки 404 у меня появляется ошибка моего хостера, а так ничего не изменилось.
user posted image
bybad
Это наверное из-за этой проверки ?!

if (isset($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id)) {$id = '';}


ему что-то не нравится, он присваивает переменной id пустоту а дальше у меня стоит так

else
{
header("Status: 404 Not Found");
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://site.ru/error404.php");
exit();
}
Ramzes_Ra
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id)) {$id = '';}

Нее, иначе смысла не было бы в mod_rewrite)) Переменная $id летит.. и значение её тоже летит..

У меня такое же регулярное выражение сделал, только со своими названиями, и всё работает, всё передаётся..
bybad
Цитата (Ramzes_Ra @ 31.08.2013 - 14:59)
Нее, иначе смысла не было бы в mod_rewrite)) Переменная $id летит.. и значение её тоже летит..

У меня такое же регулярное выражение сделал, только со своими названиями, и всё работает, всё передаётся..

Тогда в чём же дело ? Ведь у меня не работает ваш полностью скопированный .htaccess ?
killer8080
Цитата (bybad @ 31.08.2013 - 14:52)
else
{header("Status: 404 Not Found");
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://site.ru/error404.php");
exit();}

это чё такое? Со статус кодом как то определись rolleyes.gif
bybad
Цитата (killer8080 @ 31.08.2013 - 18:17)
Цитата (bybad @ 31.08.2013 - 14:52)
else
{header("Status: 404 Not Found");
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://site.ru/error404.php");
exit();}

это чё такое? Со статус кодом как то определись :rolleyes:

Да я уже пробовал и убирать его и условие менял, а проблема все ровно оставалась.

Сейчас удалил "хэдер", прописал в .htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php


так у меня даже при попытке открыть страницу без расширения, хостер выдаёт ошибку 404.

Я в замешательстве.
killer8080
Цитата (bybad @ 31.08.2013 - 21:27)
Да я уже пробовал и убирать его и условие менял, а проблема все ровно оставалась.

Статус код может быть только один!


bybad
напиши еще раз какие должны быть ссылки, и что нужно получить.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.