Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 17.03.2016
Сообщений: 32

ЧПУ ссылка категория + материал

18.03.2016, 23:24. Показов 1033. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех участников Cyberforum-а!
Помогите разобраться. Я новичок в сайто-строении, весь мозг сломал, не могу доделать.

При создании ЧПУ, возникли трудности. В файле .htaccess ЧПУ преобразуется в динамическую ссылку с двумя GET переменными (например из my-site.ru/instrumenti/lobzik в my-site.ru/?category=instrumenti&toolname=lobzik). Нужно сделать что бы ссылка my-site.ru/instrumenti открывалась без слеша в конце, а не перебрасывала на 404 и редиректилась на my-site.ru/instrumenti в случае если в конце все таки будет слеш (/). И тоже самое для my-site.ru/instrumenti/lobzik.

Сейчас так: по ссылке my-site.ru/instrumenti без слеша, перекидывает на 404 страницу, если поставить слеш в конце ссылки, то все работает.
По такой ссылке my-site.ru/instrumenti/lobzik все работает, но если поставить слеш в конце, получаю одну GET переменную category со значением instrumenti/lobzik, а вторая переменная toolname пустая.

Содержание файлов:

Файл .htaccess
Bash
1
2
3
4
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ /?category=$1&toolname=$2 [L,QSA]
Файл index.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
 
__start();
 
 
echo '<p>Category: '.$_GET['category'].'</p>';
 
echo '<p>Tool Name: '.$_GET['toolname'].'</p>';
 
...
?>
Фу-у-х, вроде все рассказал . Если что-то не понятно пишите, попробую разъяснить. Заранее благодарю за любую помощь!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2016, 23:24
Ответы с готовыми решениями:

Текстовый материал (а также пхп-код) не загружается как материал в движке сайта если присутствует символ "верхняя запятая"
Здравствуйте! Проблема такая. Я являюсь администратором сайта на php (скорее всего битрикс) и возникла следующая проблема: при...

Строка таблицы как ссылка на материал
Здравствуйте. Есть сайт на drupal 7. На сайте есть таблицы с объявлениями. В таблице под каждое объявление 4 ячейки. Теперь вопрос -...

Ссылка ЧПУ
Есть ссылка я её вырулил она работает . RewriteRule ^(.*)/$ /name.php?name_url=$1 получаеться она такая на выходе . site.ru/vasya/...

8
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
19.03.2016, 01:24
Файл-обработчик пишите явно. Избавление от слеша делается так:
Code
1
2
3
4
5
6
7
8
9
10
<IfModule mod_dir.c>
DirectorySlash Off
</IfModule>
 
RewriteEngine On
 
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule (.*)/*$ http://%1/$1 [R=301,L]
 
RewriteRule (.*)/+$ /$1 [R=301,L]
1
1 / 1 / 0
Регистрация: 17.03.2016
Сообщений: 32
19.03.2016, 11:02  [ТС]
Работает, слеши убираются, но одна проблема осталась и появилась ещё одна.

1). при переходе по ссылке my-site.ru/instrumenti также выкидывает на 404 Not Found
2). если в корне есть какая-то директория (например material), то при my-site.ru/material выкидывает на 403 Forbidden
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
19.03.2016, 13:11
1) покажите .htaccess целиком. Вы-то правило показали только для двухкомпонентного пути;
2) условие с !-d уберите.
0
1 / 1 / 0
Регистрация: 17.03.2016
Сообщений: 32
20.03.2016, 10:29  [ТС]
Вот файл .htaccess целиком
Bash
1
2
3
4
5
6
7
8
9
10
11
12
<IfModule mod_dir.c>
DirectorySlash Off
</IfModule>
 
RewriteEngine On
 
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule (.*)/*$ http://%1/$1 [R=301,L]
 
RewriteRule (.*)/+$ /$1 [R=301,L]
 
RewriteRule ^(.*)/(.*)$ /?category=$1&toolname=$2 [L,QSA]
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
20.03.2016, 12:26
Сказал же:
Цитата Сообщение от miketomlin Посмотреть сообщение
Файл-обработчик пишите явно.
Лучше оставить условие с !-f во избежание зацикливания при однокомпонентных путях.

Как я и сказал, нет правила для однокомпонентного пути, а имеющееся не является универсальным.
0
1 / 1 / 0
Регистрация: 17.03.2016
Сообщений: 32
20.03.2016, 21:41  [ТС]
Цитата Сообщение от miketomlin Посмотреть сообщение
Сказал же:
Файл-обработчик пишите явно.
Честно говоря не совсем понял вас Не ругайте сильно. Не могли бы вы подробней написать, что нужно сделать?

Со слешами разобрались спасибо!

По ссылке my-site.ru/instrumenti/lobzik получаю переменные в индексном файле $_GET['category'] //instrumenti и $_GET['toolname'] // lobzik

По такой ссылке my-site.ru/contacts возникает ошибка 404, а если такая директория существует, то показывает список файлов, index.php в директории не загружается, но присутствует в списке файлов, при клике по нему перебрасывает на my-site.ru/index.php

Из-за того, что я вас не понял, я не могу правильно составить код. Скорее вообще все неправильно делаю.
Можете показать, как правильно применить ЧПУ
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
20.03.2016, 22:22
У вас тут просматривается только один файл-обработчик. Скорее всего он называется index.php. Вот я и советую писать его явно: не /?category=$1&toolname=$2, а /index.php?category=$1&toolname=$2

Цитата Сообщение от MrVik Посмотреть сообщение
По такой ссылке my-site.ru/contacts возникает ошибка 404, а если такая директория существует, то показывает список файлов, index.php в директории не загружается, но присутствует в списке файлов, при клике по нему перебрасывает на my-site.ru/index.php
Это все логично. Я же вам написал, что у вас нет правила для однокомпонентного пути вроде вашего my-site.ru/contacts – запрос проходит мимо вашего обработчика и уходит на обработку сервером или его отдельным модулем (это когда вы видите содержимое директории), а когда вы выбираете файл во вложенной директории, путь получается снова двухкомпонентым и из-за отсутствия условия с !-f, которое я советовал оставить, обрабатывается основным обработчиком. Добавьте еще одно правило (вместе с условием с !-f) для однокомпонентного пути или попробуйте написать универсальное правило.

Цитата Сообщение от MrVik Посмотреть сообщение
Можете показать, как правильно применить ЧПУ
Лучше всего вовсе не делать трансляцию компонентов пути в GET-параметр(ы). Вот продолжение того файла, который я вам показывал:
Code
1
2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* /index.php
Путь обрабатываете внутри скрипта, отделяя его от строки параметров и разделяя на компоненты. На днях напишу об этом статью и пришлю ссылку.
1
1 / 1 / 0
Регистрация: 17.03.2016
Сообщений: 32
21.03.2016, 11:24  [ТС]
Цитата Сообщение от miketomlin Посмотреть сообщение
Путь обрабатываете внутри скрипта, отделяя его от строки параметров и разделяя на компоненты.
Спасибо miketomlin, попробую применить.

Буду ждать вашей статьи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.03.2016, 11:24
Помогаю со студенческими работами здесь

Относительная ссылка при ЧПУ
Открыта страница http://localhost/cpp, на ней есть ссылка &lt;h3&gt;&lt;a href=&quot;identificators&quot;&gt;Идентификаторы c++&lt;/a&gt;&lt;/h3&gt;, которая...

Настройка ЧПУ, не работает ссылка на детальный просмотр
Использую редакцию Малый бизнес. В редакции Старт такой проблемы нет. Создал тип инфоблока Контент, в нем инфоблок Новости. У инфоблока...

Перестали загружаться разделы Материал: [ Изменить ] и Материал: [ Создать ]
Доброго времени суток. Стоит Joomla 1.5.20 Перестали загружаться разделы Материал: и Материал: . При попытке перейти Материал: вылазит во...

PrestaShop ЧПУ работает, но с админки перенаправляет без ЧПУ. Так и должно быть?
Здравствуйте. Версия Prectashop 1.6.0.9. Суть в том, что если я сразу перехожу по адресу localhost/www/presta, то и дальше путешествуя...

Был сайт без ЧПУ, потом с "некрасивыми" ЧПУ
Сайт на Joostina. Сперва был без ЧПУ. Потом после индексации включили штатный ЧПУ Жустины. Там ЧПУ вида site.ru/content/1/123.html Потом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru