могу ли я ввести чистый URL-адрес в drupal и вместо этого преобразовать его в URL-адрес со строкой запроса?

#path #url-rewriting #drupal-7 #clean-urls

#путь #url-перезапись #drupal-7 #чистые URL-адреса

Вопрос:

я создаю сайт drupal, который должен включать функцию, которая превратит чистый URL-адрес в URL-адрес со строкой запроса.

Способ, которым это должно работать, будет:

  1. пользователь должен ввести любой чистый URL-адрес, например www.example.com/hobbies/skiing в строке URL-адреса.
  2. вот моя проблема:

внутри .htaccess я поместил эту строку кода:

 RewriteRule ^hobbies/([a-zA-Z0-9-]*) /index.php?hobbies=$1 [NC]
  

в drupal я создал страницу с включенным фильтром PHP, затем ввел

 <?PHP echo $_GET['hobbies']; ?>
  

RewriteRule должен превратиться www.example.com/hobbies/skiing в www.example.com/index.php?hobbies=skiing , но я предполагаю, что код работает не так, как ожидалось, или в drupal запущены коды, которые либо пропускают команду .htaccess, либо что-то в этом роде.

3. как только URL-адрес будет преобразован в грязный URL-адрес, на странице отобразится значение хобби, поскольку код работает при фактическом вводе www.example.com/index.php?hobbies=skiing прямо в строку URL-адреса.

можете ли вы помочь мне с этим?

Ответ №1:

Есть гораздо более простой способ сделать это, Drupal уже сохраняет части пути на потом, к которым вы можете получить доступ с помощью arg() функции:

 if (arg(0) == 'hobbies' amp;amp; arg(1)) {
  $hobby = arg(1);
}
  

Если ваш путь является псевдонимом, хотя arg() вернет исходный путь маршрутизатора (узел / 1 и т. Д.), Поэтому вам придется быть немного более изобретательным:

 $parts = explode('/', $_SERVER['REQUEST_URI']);
if ($parts[1] == 'hobbies' amp;amp; isset($parts[2])) {
  $hobby = $parts[2];
}
  

Обновить

Судя по вашим комментариям, вам было бы лучше создать быстрый пользовательский модуль для этого:

 // Implements hook_menu().
function mymodule_menu() {
  $items['hobbies/%'] = array(
    'title' => 'A title',
    'access arguments' => array('access content'),
    'page callback' => 'mymodule_page',
    'page arguments' => array(1)
  );

  return $items;
}

function mymodule_page($hobby) {
  return $hobby;
}
  

Это буквально выведет все, что когда-либо было после hobbies/ , в области содержимого страницы

Комментарии:

1. привет @kiamlaluno. где я могу найти или изменить его, или поместить коды? что, если хобби / катание на лыжах (или что-то, что я хотел бы ввести) еще не присутствует, могу ли я получить это значение? спасибо за большую помощь!

2. на случай, если вы также знаете ответ.. где я могу найти или изменить его, или поместить коды? что, если хобби / катание на лыжах (или что-то, что я хотел бы ввести) еще не присутствует, могу ли я получить это значение? спасибо за большую помощь!

3. Где бы вы ни планировали использовать $_GET['hobbies'] , вместо этого используйте приведенный выше код 🙂

4. я говорю о страницах (хобби / <что угодно>), которые могут еще не существовать. что-то вроде создания динамической страницы, и слова, введенные внутри аккуратного URL, будут использоваться в качестве переменных. огромное спасибо!

5. Нет, это немного сбивает с толку, но arg() на самом деле это функция Drupal, используемая для получения частей URL, это не имеет ничего общего с PHP func_get_args() или аргументами, переданными вызывающей функции