阻止一些Drupal URL

ya.*_*eck 4 drupal module drupal-6

是否有一个模块可以用来禁用一些Drupal系统页面?例如,我想停用node,taxonomy/term/*,filter/tips.

mar*_*end 8

我不确定是否有一个模块可以做到这一点,但为此编写自己的自定义模块并不困难.您只需要实现hook_menu_alter(并在更改代码后清除缓存).您可以选择返回"拒绝访问"页面或"未找到404":

<?php
  function MODULENAME_menu_alter(&$items) {
    // This will deny access to taxonomy/term/* for all users.
    $items['taxonomy/term/%']['access callback'] = FALSE;
    // This will completely remove filter/tips, resulting in a 404.
    unset($items['filter/tips']);
  }
?>
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关编写Drupal模块的更多信息,请参阅http://drupal.org/developing/modules.


Sid*_*iya 6

对我来说,这似乎更像是"一次性"配置.因此,我想知道是否有必要为您提供一个您在其中一条评论中请求的管理界面.

如果您正在使用Apache,则可以在站点的虚拟主机配置中包含以下指令:

<LocationMatch ^/taxonomy/term>
  SetHandler server-status
  Order Deny,Allow
  Deny from all
</LocationMatch>

<LocationMatch ^/filter/tips>
  SetHandler server-status
  Order Deny,Allow
  Deny from all
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)

这将拒绝访问这些URL.但是您需要确保没有URL别名的URL taxonomy/term/.否则,用户可以访问这些URL.

查看http://httpd.apache.org/docs/2.0/mod/core.html#locationmatchhttp://httpd.apache.org/docs/2.0/mod/core.html#location获取一些文档

  • 这样做实际上有很多好处,最显着的是性能:Drupal不需要自我引导和运行.并且你得到了与你自己的模块一样多的"复制",所以@Rimian的理由不是很有效.别名可能是一个问题,但也可能是一个专业人士:你可以将你的htacess列入某种模式,然后通过为他们创建一个别名从Drupal中"选择"一些 (2认同)
  • 同情+1 - 虽然我同意这不是一个好的通用解决方案_,但我也同意这将是一个合理的快速解决方案,_依赖于环境_. (2认同)