Вот моя ситуация: у меня есть куча HTML-страниц на сайтах / default / files / pdf. Я хочу обслуживать их как есть, поэтому у меня есть ссылки на них на моем сайте Drupal. Однако одно из требований заключается в том, что все URL-адреса этих HTML-страниц не должны содержать каких-либо расширений. Кроме того, я хочу, чтобы он действовал таким образом, чтобы при переходе пользователей на example.com/sites/default/files/pdf/somehtmlfile URL-адрес отображался как example.com/pdf/somehtmlfile, а также при посещении пользователями примера. Вместо этого будет подан com / pdf / somehtmlfile, example.com/sites/default/files/pdf/somehtmlfile.
Из моего независимого исследования кажется, что я должен использовать hook_url_inbound_alter () и hook_url_outbound_alter (). Тем не менее, я, кажется, что-то делаю не так, потому что URL не меняется вообще.
Ниже мой код. Я создал модуль с именем html_extension_remover (не очень оригинальное имя, я знаю). Я успешно активировал модуль, и некоторые операторы отладки были успешно выполнены, поэтому я знаю, что модуль работает.
function html_extension_remover_url_outbound_alter(&$path, &$options, $original_path){
$pdf_regex = '|^sites/default/files/pdf(/.*)?|';
$pdf_new_path = 'pdf';
if (preg_match($pdf_regex,$path, $matches)) //rewrite all request to sites/default/files/pdf to pdf, looks nicer
if (count($matches)==1)
$path = $pdf_new_path;
else
$path = $pdf_new_path . $matches[1]; //append the rest of the URL, after the Regex match
if (strpos($path, $pdf_new_path)!=FALSE) //URL contains pdf, means viewing converted PDFs in pdf dir
if (strpos($path, '.htm')!=FALSE){ //if viewing .htm/.html file
$path = substr(0, strpos); //strip extension from URL
}
$pdf_new_path = 'sites/default/files/pdf';
$pdf_regex = '|^pdf(/.*)?|';
if (preg_match($pdf_regex, $path, $matches)){
if (count($matches)==1){
$path = $pdf_new_path;
}
else{
$path = $pdf_new_path.$matches[1].'.htm';
}
}
}
function html_extension_remover_url_inbound_alter(&$path, &$options, $original_path){
$pdf_new_path = 'sites/default/files/pdf';
$pdf_regex = '|^pdf(/.*)?|';
if (preg_match($pdf_regex, $path, $matches)){
if (count($matches)==1){
$path = $pdf_new_path;
}
else{
$path = $pdf_new_path.$matches[1].'.htm';
}
}
}