За последние 24 часа нас посетили 15756 программистов и 1664 робота. Сейчас ищут 811 программистов ...

Почему не работает RewriteRule

Тема в разделе "PHP для новичков", создана пользователем lemonl, 28 янв 2018.

Метки:
  1. lemonl

    lemonl Активный пользователь

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Почему не работает RewriteRule ?

    Код (Text):
    1. RewriteEngine On
    2. RewriteCond %{THE_REQUEST} " (/[^?/]+)\.php"
    3. RewriteRule ^ %1 [R=301,L]
    4. RewriteCond %{REQUEST_FILENAME}.php -f
    5. RewriteRule ^([^/]+)$ /$1.php [L]
    6. RewriteRule ^mysql/tags/([0-9]+)\$ mysql.php?tag=$1 # Вот это не работает !
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    используй единую точку и не изобретай велосипеды

    PHP:
    1. AddDefaultCharset UTF-8
    2.  
    3. DirectoryIndex index.php
    4.  
    5. RewriteEngine On
    6.  
    7. # Redirect Trailing Slashes If Not A Folder...
    8. RewriteCond %{REQUEST_FILENAME} !-d
    9. RewriteRule ^(.*)/$ /$1 [L,R=301]
    10.  
    11. # Handle Front Controller...
    12. RewriteCond %{REQUEST_FILENAME} !-d
    13. RewriteCond %{REQUEST_FILENAME} !-f
    14. RewriteRule ^ index.php [L]
    https://php.net/manual/ru/function.parse-url.php
     
  3. lemonl

    lemonl Активный пользователь

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Спасибо огромное !

    Извините за наглость, а где можно посмотреть полноценный шаблон работы parse-url и вывод страниц. Так сказать пример работы
    --- Добавлено ---
    Хочу сделать маленький но качественный проект... нужно сделать обработку таких страниц:
    mysite.com/copy/
    mysite.com/about/
    mysite.com/terms/
    mysite.com/privacy/

    mysite.com/en/key/ac7b639e3217ecec1e7d78b98264a89b
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Все зависит от ваших потребностей. Распарсить можно элементарно: Как сделать единую точку входа с ЧПУ?
    --- Добавлено ---
    Трэйлинг слеши – это действительно то немногое, что обычно обрабатывается на уровне Web-сервера:
    Код (Text):
    1.  
    2. <IfModule mod_dir.c>
    3. DirectorySlash Off
    4. </IfModule>
    5.  
    6. RewriteEngine On
    7.  
    8. RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
    9. RewriteRule (.*)/*$ http://%1/$1 [R=301,L]
    10.  
    11. RewriteRule (.*)/+$ /$1 [R=301,L]
    12.  
    13. RewriteCond %{REQUEST_FILENAME} !-f
    14. RewriteRule ^.* /index.php
     
  5. lemonl

    lemonl Активный пользователь

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    мне нужно сделать элементарно .... вывести страницы mysite.com/about/ и их обработка. Никаких сложных действий не нужно делать ... ссылка такая то ... выводим шаблон такой то ... и т.д.
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    В качестве основы имени шаблона можете брать значение $pa[0] из кода в статье. Только определитесь с проверкой на существование запрошенного шаблона и на возможную попытку взлома. Можно, например, сверять значение по массиву слагов.

    Можно использовать и полный путь с обрезанными по краям слешами из $px и также сверять значение по массиву путей. Просто проверки на существование файла не достаточно, могут подсунуть с /../ и т.п. Можно, например, проверять realpath и сравнивать с путем из запроса (из адреса).
     
    #6 miketomlin, 29 янв 2018
    Последнее редактирование: 29 янв 2018
  7. lemonl

    lemonl Активный пользователь

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Есть ли где-нибудь уже реализованный маленький качественный такой проект... буквально на несколько страниц, для примера с исходниками. Искал в интернете ничего не нашел.
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Не в курсе. Пользуюсь только своим. Взять хотя бы упомянутый в статье фронт. Но он на БД, хотя в остальном примитив (один роут, маска кот. используется в том числе и для проверки на допустимые символы – экранирование строк и т.п. в запросах не используется; пути могут быть многокомпонентными, но из коробки распознаются только две части – первый компонент и «остаток», т.е. под ваш послед. пример с трехкомпонентным путем нужно писать расширение; также из коробки нет поддержки деления на GET/POST- и др. обработчики, кэширования, дин. обновляемых виджетов и т.д., и т.п.).

    Как выше написал, под ваши требования достаточно написать неск. строк кода:
    - распарсили по примеру выше;
    - определили массив вроде $a=['','about'];
    - после чего сверяете слаг или путь с этим списком (см. in_array) и в случае успеха подключаете соотв. шаблон (все что вы определили в списке, должно существовать), иначе подключаете шаблон/читаете и выводите статик. страницу 404-ой (т.е. с пред. установкой статуса 404).