#path #url-rewriting #drupal-7 #clean-urls
#путь #url-перезапись #drupal-7 #чистые URL-адреса
Вопрос:
я создаю сайт drupal, который должен включать функцию, которая превратит чистый URL-адрес в URL-адрес со строкой запроса.
Способ, которым это должно работать, будет:
- пользователь должен ввести любой чистый URL-адрес, например www.example.com/hobbies/skiing в строке URL-адреса.
- вот моя проблема:
внутри .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, это не имеет ничего общего с PHPfunc_get_args()
или аргументами, переданными вызывающей функции