如何重写特定的URL?

时间:2009-08-18 07:18:11

标签: drupal .htaccess drupal-6 drupal-modules

我想重写以下网址:

  • 节点/添加
  • 节点/编辑 等

是类似的东西   - 内容/添加   - 内容/编辑

我也使用预填充模型,并且希望能够重写此URL:

  • 节点/添加/单画廊图像?编辑[field_gallery_node_reference] [0] [NID] = 48

对于这样的事情:

  • 内容/添加/图像?N = 48

这可能吗?如果是这样,我是否需要一些Drupal模块,或者我是否必须接受htaccess文件?

4 个答案:

答案 0 :(得分:5)

使用pathauto模块,您可以为网址创建别名。你可以设置很多规则,并且应该可以使用它。我不确定它与预填充模型的整合程度如何。但其余的应该很容易。

答案 1 :(得分:1)

这里有几个选择。

1)您可以使用pathauto模块重命名路径。然后,这些路径在服务器级别变得完全可用,但旧节点/添加和节点/%/编辑路径仍然存在。

2)您可以创建一个通过hook_menu实现路径的自定义模块,从node.module的hook_menu实现中复制相应的代码。这也会在站点上留下旧节点/ add和node /%/ edit路径,但是您可以使用hook_menu_alter从菜单数组中取消设置相应的路径。

3)您可以使用Olav建议的custom_url_rewrite_inboundcustom_url_rewrite_outbound函数。

老实说,第一个选项通常是更好的选项,因为它会更快并且不会打开意外的错误。方法2肯定会改变你想要的东西,但也会涉及改变Drupal所依赖的一些相当基本的路径,并且当你发现节点模块中未被覆盖的角落时,这可能意味着很多调试会话。你的改变。方法3我不熟悉,但看起来它允许你像1中那样重写路径,但是让它们更真实,但是潜在的性能可能存在问题,并且需要进行大量的调试。

答案 2 :(得分:0)

您可以使用hook_menu创建一个实现这些回调的自定义模块,但这只会为这些操作创建其他网址而不会删除旧的回调。

答案 3 :(得分:0)

查看函数custom_url_rewrite_inboundcustom_url_rewrite_outbound。这些不是模块,而是放在settings.php中的函数,它们与drupal的url映射在低级别上进行交互。