【问题标题】:How can I rewrite a specific URL?如何重写特定的 URL?
【发布时间】:2009-08-18 07:18:11
【问题描述】:

我想重写以下网址:

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

变得像 - 内容/添加 - 内容/编辑

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

  • node/add/single-gallery-image?edit[field_gallery_node_reference][0][nid]=48

这样的:

  • content/add/image?n=48

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 不是我想要的。我希望 URL 在服务器级别更改。这样就可以使用其他语法调用长链接。这有意义吗?
    【解决方案2】:

    这里有几个选项。

    1) 您可以使用 pathauto 模块重命名路径。然后这些路径在服务器级别变得完全可用,但旧的 node/add 和 node/%/edit 路径仍然存在。

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        查看函数custom_url_rewrite_inboundcustom_url_rewrite_outbound。这些不是模块,而是放置在 settings.php 中的函数,它们在低级别与 drupal 的 url 映射接口。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-12
          相关资源
          最近更新 更多