Nano Hash - криптовалюты, майнинг, программирование

Mod Rewrite - есть ли более быстрый способ?

Я создаю сайт с большим количеством параметров. На данный момент я использую этот код в своем файле .htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /epo

RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/$ index.php?section=$1&content=$2&site=$3&param=$4&param2=$5 [QSA]
RewriteRule (.*)/(.*)/(.*)/(.*)/$ index.php?section=$1&content=$2&site=$3&subsite=$4 [QSA]
RewriteRule (.*)/(.*)/(.*)/$ index.php?section=$1&content=$2&site=$3 [QSA]
RewriteRule (.*)/(.*)/$ index.php?section=$1&content=$2 [QSA]
RewriteRule (.*)/$ index.php?section=$1 [QSA]

RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L]

Я новичок в mod_rewrite, поэтому этот код беспорядок. Есть ли лучший способ справиться со всеми этими параметрами? Последние две строки просто добавляют «/» в конце, если его нет. Было бы также здорово, если бы кто-нибудь мог объяснить свой код, чтобы я мог понять, что я сделал неправильно :)

19.03.2013

  • прочитайте мой ответ здесь " title="переписывание URL-адреса в php, когда в URL-адресе передается несколько значений"> stackoverflow.com/questions/14637335/ 19.03.2013
  • Понижение было ненужным - мне кажется, правильный вопрос. Я поддерживаю ссылку выше - но с контекстом - это полезно, когда у вас есть сложные правила И возможность использовать стиль архитектуры «фронт-контроллер» для перенаправления всех запросов на ваш index.php, а затем делать исключения (например, для изображений, js, css и др.). 19.03.2013
  • спасибо за эту ссылку, но я не совсем ее понимаю: что вы имеете в виду под этими правилами, все перенаправляется на index.php. Таким образом, вы можете реализовать любую логику URL-адресов с помощью PHP. Можете ли вы предоставить мне простой пример PHP, чтобы я мог использовать ваш код mod_rewrite? заранее спасибо 19.03.2013

Ответы:


1

Лично я перенаправляю все запросы в один файл, а затем обрабатываю их оттуда.

RewriteRule ^(.*)$ index.php?path=$1 [QSA]

А затем в index.php используйте что-то вроде

$params = explode('/', $_GET['path'];

$section = $params[0];
$content = $params[1];
$site    = $params[2];
$subsite = $params[3];
//etc.

Имейте в виду, что вам нужна дополнительная проверка всех параметров.

19.03.2013
  • Спасибо, это лучший способ работы с несколькими параметрами? Я всегда боюсь замедлений, вызванных всеми этими параметрами :) Другой вопрос: какая еще проверка мне нужна для этих параметров? 19.03.2013
  • В зависимости от ваших настроек $params[3] может выдать предупреждение, если установлены только 2 параметра. Также используйте регулярную проверку, чтобы убедиться, что параметры соответствуют вашим ожиданиям. (числовой или строковый, sql escape и т. д.) 19.03.2013
  • Большое спасибо, теперь я понял :) Я использовал ваш код и использовал цикл foreach, чтобы проверить, установлены ли параметры. 19.03.2013

  • 2

    Это похоже на пример Хьюго, но без параметра GET:

    <IfModule mod_rewrite.c>
        SetEnv HTTP_MOD_REWRITE On
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} -s [OR]
        RewriteCond %{REQUEST_FILENAME} -l [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^.*$ - [NC,L]
        RewriteRule ^.*$ index.php [NC,L]
    </IfModule>
    

    в PHP вы можете сделать следующее:

    $pathInfo = pathinfo($_SERVER['SCRIPT_NAME']);
    $baseUrl = $pathInfo['dirname'];
    $baseFile = $pathInfo['basename'];
    $url = rtrim(str_replace([$baseUrl, '/'.$baseFile], '', $_SERVER['REQUEST_URI']), '/');
    $method = strtolower($_SERVER['REQUEST_METHOD']);
    $isModRewrite = array_key_exists('HTTP_MOD_REWRITE', $_SERVER);
    

    Теперь ваш URL может выглядеть примерно так:

    http://www.yourserver.com/param1/param2
    

    ИЛИ (если перезапись мода не включена)

    http://www.yourserver.com/index.php/param1/param2
    

    В обоих случаях переменная $url выглядит как /param1/param2

    Вы можете сделать explode в этой строке или передать эту строку библиотеке маршрутизации PHP для извлечения ваших параметров.

    Библиотеки примеров маршрутизации PHP:

    https://github.com/robap/php-router

    https://github.com/deceze/Kunststube-Router

    19.03.2013
  • Спасибо за ваш код, таким образом я также могу избавиться от параметра GET :) Этот код работает для меня. 19.03.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..