За последние 24 часа нас посетили 22340 программистов и 1028 роботов. Сейчас ищут 739 программистов ...

.htaccess и знак ?

Тема в разделе "Прочие вопросы по PHP", создана пользователем AlexProg, 31 мар 2019.

Метки:
  1. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Всем добра!

    .htaccess замучил меня... Помогите решить проблему.

    Есть движок MVC, роутинг прописывается типо 'settings' => 'account/settings',

    Код (Text):
    1.  
    2. RewriteEngine on
    3.  
    4. RewriteBase /
    5.  
    6. RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    7. RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    8.  
    9. Options +FollowSymlinks
    10.  
    11. RewriteCond %{REQUEST_FILENAME} !-d
    12. RewriteCond %{REQUEST_FILENAME} !-f
    13.  
    14. RewriteCond %{REQUEST_URI} !^/assets/
    15. RewriteCond %{REQUEST_URI} !^/sitemap.xml
    16. RewriteCond %{REQUEST_URI} !^/robots.txt
    17. RewriteRule .* index.php [L,QSA]
    18.  
    19. php_value default_charset utf-8
    20. php_value error_reporting 'E_ALL & ~E_DEPRECATED & ~E_NOTICE'
    21. AddType 'text/html; charset=utf-8' .html .htm .shtml

    Хотелось бы получить и обработать
    http://saitru/index.php?code=qwerty123
    или
    http://saitru/settings?code=qwerty123

    Спасибо!
     
  2. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    UPDATE: С меня пиво! ;)
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Строка параметров наследуется при редиректе/рерайте даже без указания QSA, если в подстановке не указана своя строка параметров.

    Т.е. по идее все должно работать. Или вы просто не знаете, как обрабатывать показанные запросы?
    --- Добавлено ---
    Или речь о том, что роутер «режет» строку параметров/не пропускает такие запросы?
     
    AlexProg нравится это.
  4. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Видимо да. Т.е. стоит только добавить ? в конец строки все, ошибка.
    Роутинг то в файле прописан.
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Ну так код в студию. Зачем было .htaccess постить? Меня, например, это только сбило с толку.
     
    AlexProg нравится это.
  6. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Какой?

    Главная так '' => 'main/index',

    Сам класс
    PHP:
    1. <?php
    2. /**
    3. *
    4. */
    5. class Router
    6. {
    7.  
    8.     public $routes;
    9.    
    10.     function __construct()
    11.     {
    12.  
    13.         $routesPath = ROOT . '/config/routes.php';
    14.  
    15.         $this->routes = include($routesPath);
    16.  
    17.     }
    18.  
    19.     private function getUri()
    20.     {
    21.         if (!empty($_SERVER['REQUEST_URI'])) return trim($_SERVER['REQUEST_URI'], '/');
    22.  
    23.     }
    24.  
    25.     public function run()
    26.     {
    27.  
    28.         $uri = $this->getUri();
    29.  
    30.         $result = false;
    31.  
    32.         foreach ($this->routes as $uriPattern => $path)
    33.         {
    34.  
    35.             if (preg_match("~^$uriPattern$~", $uri))
    36.             {
    37.  
    38.                 $internalRoute = preg_replace("~$uriPattern~", $path, $uri);
    39.  
    40.                 $params = explode('/', $internalRoute);
    41.  
    42.                 $controllerName = ucfirst(array_shift($params) . 'Controller');
    43.  
    44.                 $actionName = 'action' . ucfirst(array_shift($params));
    45.  
    46.                 $controllerObject = new $controllerName();
    47.  
    48.                 call_user_func_array(array($controllerObject, $actionName), $params);
    49.  
    50.                 $result = true;
    51.  
    52.                 break;
    53.  
    54.             }
    55.            
    56.         }
    57.  
    58.         /*if ($result == false)
    59.         {
    60.             $controllerObject = new MainController();
    61.  
    62.             $controllerObject -> ActionNotfound();
    63.         }*/
    64.  
    65.     }
    66.  
    67.  
    68. }
    --- Добавлено ---
    UPDATE:
    Вроде бы сделал.
    PHP:
    1. RewriteCond %{QUERY_STRING} ^code=(.*)$
    2. RewriteRule .*$ /settings/%1? [R=301,L]
    Так считается нормально? Поисковики не банят?
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Это что-то непонятное. Редирект в /settings/* с переносом значения параметра в путь (и отбросом строки параметров за ненадобностью). Походу вы толком не смогли объяснить, что вам было нужно. Или вы по ходу дела решили изменить адресацию вместо подгонки роутера под имеющуюся адресацию.
     
    AlexProg нравится это.
  8. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Как бы вы решили?