Почему не работает RewriteRule ? Код (Text): RewriteEngine On RewriteCond %{THE_REQUEST} " (/[^?/]+)\.php" RewriteRule ^ %1 [R=301,L] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^/]+)$ /$1.php [L] RewriteRule ^mysql/tags/([0-9]+)\$ mysql.php?tag=$1 # Вот это не работает !
используй единую точку и не изобретай велосипеды PHP: AddDefaultCharset UTF-8 DirectoryIndex index.php RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] https://php.net/manual/ru/function.parse-url.php
Спасибо огромное ! Извините за наглость, а где можно посмотреть полноценный шаблон работы parse-url и вывод страниц. Так сказать пример работы --- Добавлено --- Хочу сделать маленький но качественный проект... нужно сделать обработку таких страниц: mysite.com/copy/ mysite.com/about/ mysite.com/terms/ mysite.com/privacy/ mysite.com/en/key/ac7b639e3217ecec1e7d78b98264a89b
Все зависит от ваших потребностей. Распарсить можно элементарно: Как сделать единую точку входа с ЧПУ? --- Добавлено --- Трэйлинг слеши – это действительно то немногое, что обычно обрабатывается на уровне Web-сервера: Код (Text): <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] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.* /index.php
мне нужно сделать элементарно .... вывести страницы mysite.com/about/ и их обработка. Никаких сложных действий не нужно делать ... ссылка такая то ... выводим шаблон такой то ... и т.д.
В качестве основы имени шаблона можете брать значение $pa[0] из кода в статье. Только определитесь с проверкой на существование запрошенного шаблона и на возможную попытку взлома. Можно, например, сверять значение по массиву слагов. Можно использовать и полный путь с обрезанными по краям слешами из $px и также сверять значение по массиву путей. Просто проверки на существование файла не достаточно, могут подсунуть с /../ и т.п. Можно, например, проверять realpath и сравнивать с путем из запроса (из адреса).
Есть ли где-нибудь уже реализованный маленький качественный такой проект... буквально на несколько страниц, для примера с исходниками. Искал в интернете ничего не нашел.
Не в курсе. Пользуюсь только своим. Взять хотя бы упомянутый в статье фронт. Но он на БД, хотя в остальном примитив (один роут, маска кот. используется в том числе и для проверки на допустимые символы – экранирование строк и т.п. в запросах не используется; пути могут быть многокомпонентными, но из коробки распознаются только две части – первый компонент и «остаток», т.е. под ваш послед. пример с трехкомпонентным путем нужно писать расширение; также из коробки нет поддержки деления на GET/POST- и др. обработчики, кэширования, дин. обновляемых виджетов и т.д., и т.п.). Как выше написал, под ваши требования достаточно написать неск. строк кода: - распарсили по примеру выше; - определили массив вроде $a=['','about']; - после чего сверяете слаг или путь с этим списком (см. in_array) и в случае успеха подключаете соотв. шаблон (все что вы определили в списке, должно существовать), иначе подключаете шаблон/читаете и выводите статик. страницу 404-ой (т.е. с пред. установкой статуса 404).