Intereting Posts
как получить максимальную длину этой функции socket_recv () в PHP Как решить тайм-аут в phpmyadmin? Netbeans 8 и xdebug очень медленные PHP ElasticSearch, как настроить отображение перед индексацией записей? Разархивируйте файл с помощью php Показать определенный контент на основе текущего сеанса пользователя PHP Как заблокировать файл xml file usinf Возможно ли получить информацию об оборудовании с помощью php или javascript? Как отредактировать мой код, чтобы он печатал все блоки строки JSON, а не только первый? получать результат от команды shell_exec по мере запуска команды Является ли сервер заголовка X-Requested-With достаточным для защиты от CSRF для приложения, управляемого ajax? Выход PHP DomDocument без <? Xml version = "1.0" encoding = "UTF-8"?> Предупреждение: mysqli_query () ожидает, что параметр 1 будет mysqli, null задан Публикация сообщения на стене пользователя приложением facebook Текущая текущая дата плюс 7 дней

Довольно URL-адреса с .htaccess

У меня есть URL http://localhost/index.php?user=1 . Когда я добавляю этот файл .htaccess

 Options +FollowSymLinks RewriteEngine On RewriteRule ^user/(.*)$ ./index.php?user=$1 

Теперь мне будет разрешено использовать ссылку http://localhost/user/1 . Но как насчет http://localhost/index.php?user=1&action=update как я могу сделать это в http://localhost/user/1/update ?

Также как я могу сделать этот URL http://localhost/user/add ? Благодарю. Извините, я относительно новичок в .htaccess .

вы можете написать что-то вроде этого:

 RewriteEngine On RewriteRule ^([^/]*)/([^/]*)$ /index.php?user=$1&action=$2 [L] 

Если вы хотите повернуть

http://www.yourwebsite.com/index.php?user=1&action=update

в

http://www.yourwebsite.com/user/1/update

Вы можете использовать

 Options +FollowSymLinks RewriteEngine On RewriteRule ^user/([0-9]*)/([az]*)$ ./index.php?user=$1&action=$2 

Чтобы увидеть параметры в PHP:

 <?php echo "user id:" . $_GET['user']; echo "<br>action:" . $_GET['action']; ?> 
  • Скобки в .htaccess – это группы, которые вы можете назвать позже. с $ 1, $ 2 и т. д.
  • Первая группа, добавленная мной ([0-9] *), означает, что она получит любые числа (1, 34 и т. Д.).
  • Вторая группа означает любые символы (a, abc, update и т. Д.).

Это, на мой взгляд, немного более чистое и безопасное, чем (. *), Что в основном означает, что почти все принимается.

Поскольку вы отметили это с помощью PHP, я добавлю небольшую перспективу из того, что я сделал, и это может или не поможет вам.

Вы, конечно, можете писать исключительно в .htaccess, заботясь о порядке. Например, предположим, что у вас есть:

 RewriteRule ^user/([0-9]+)/update$ ./index.php?user=$1&action=update RewriteRule ^user/([0-9]+)$ ./index.php?user=$1 

Затем он должен, после получения

http://localhost/user/1/update

идти к

http://localhost/index.php?user=$1&action=update

и не

http://localhost/index.php?user=$1

Теперь я сделал то же самое, что и index.php?q=$1

 RewriteRule ^(.*)$ index.php?q=$1 

Затем я использовал index.php для обработки разрыва запроса. Итак, скажем, кто-то входит

http://www.example.com/user/18239810/update

это пойдет

http://www.example.com/index.php?q=user/18239810/update

Оттуда взорвите строку запроса по первому / чтобы дать user и 18239810/update .

Это скажет мне, что мне нужно передать 18239810/update на user контроллер. В этом контроллере я снова взорву аргумент в идентификатор пользователя и команду, и я могу включить команду, чтобы рассказать, как загрузить страницу, передав идентификатор пользователя в качестве аргумента функции update .

Очень быстрый и грязный пример (index.php):

 <?php $getString = explode('/', $_GET['q'], 1); $controller = $getString[0].'Controller'; require_once('/controllers/'.$controller.'.php'); $loadedController = new $controller( $getString[1] ); ?> 

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

Спасибо за идею @denoise и @mogosselin. Также с @stslavik для указания некоторых недостатков моего примера кода.

Вот как я это делаю:

 Options +FollowSymLinks RewriteEngine On RewriteRule ^user/([0-9]*)/([az]*)$ ./index.php?user=$1&action=$2 RewriteRule ^user/([az]*)$ ./index.php?user&action=$1 

с помощью var_dump($_GET); по ссылке localhost/user/1234/update я получил

 array (size=2) 'user' => string '1234' (length=4) 'action' => string 'update' (length=3) 

в то время как localhost/user/add

 array (size=2) 'user' => string '' (length=4) 'action' => string 'update' (length=3) 

это моя цель. Я просто буду делать другие вещи под капотом с помощью PHP.

Для /user/add вам нужно будет сделать отдельное правило, потому что у вас нет «среднего параметра». Так:

 RewriteRule ^user/add$ ./index.php?action=add [L,QSA] 

Затем вы можете выполнить дополнительные правила для URL-адресов, содержащих дополнительные параметры:

 RewriteRule ^user/([0-9]+)/([A-Za-z]+)$ ./index.php?user=$1&action=$2 [L,QSA] 

Это позволит вам выполнять действия с существующими пользователями. Например /user/1/update

простой способ – передать только один variabe в index.php, как это

 Options +FollowSymLinks RewriteEngine On RewriteRule ^(.*)$ index.php?data=$1 [QSA] 

и в вашем файле index.php вы делаете это

 $data = expload("/",$_GET['data']); $user = $data[1]; $action = $data[2]; 

это работает для всех случаев, когда вы пытаетесь передать много переменных, это не работает в wase, когда вы делаете что-то вроде

 http://localhost/user/add/12/54/54/66 

последняя переменная всегда принимает значение add/12/54/54/66

Просто попробуйте это!

 Options +FollowSymLinks RewriteEngine On RewriteRule ^game/([0-9]+)/([_-0-9a-zA-Z]+)/?$ index.php?user=$1&action=$2 [L,NC] 

Это оно !!

Попробуйте это очень просто:

 Options +FollowSymLinks RewriteEngine on RewriteRule index/user/(.*)/(.*)/ index.php?user=$1&action=$2 RewriteRule index/user/(.*)/(.*) index.php?user=$1&action=$2