一千萬個為什麽

搜索

為什麽在通過幹凈的URL查看Drupal自定義菜單項時會出現403錯誤?

我在Drupal 6網站上創建了一個自定義菜單項,方法是在自定義模塊中定義它。這是一個非常簡單的MENU_NORMAL_ITEM菜單項。菜單項定義為

/**
 * Implementation of hook_menu().
 */
function menu_test_menu() {
  $items['menu_test'] = array(
    'title' => 'Menu Test',
    'page callback' => 'menu_test_hello',
 'access callback' => TRUE,
 'type' => MENU_NORMAL_ITEM,
  );

  return $items;
}

由於我有幹凈的網址,因此路徑應為www.example.com/menu_test。該URL給出了403錯誤。但是,如果我輸入www.example.com/?q=menu_test,一切正常。為什麽我收到403錯誤?菜單項是無用的,因為它總是試圖轉到幹凈的URL路徑,這應該工作,但不是出於某種原因。

謝謝您的幫助!

要清楚......已啟用幹凈的URL並且菜單註冊表已重建多次。

最佳答案

此問題特定於示例回調頁面“menu_test”中使用的路徑。更改此回調路徑(例如,更改為“test_menu”)可解決此問題。這實際上是.htaccess文件中重寫規則的問題。部分規則將“test”視為路徑的結尾。因此,在我的情況下,我將無法使用任何以“test”結尾的路徑。這就是我收到403錯誤的原因。

如果遇到相同類型的問題,請檢查重寫規則是否存在類似情況。在我的情況下,我決定簡單地避免以“測試”結束我的任何路徑,這應該不會太困難。

不管怎樣,謝謝你的評論!我很高興現在已經弄明白了。

CORRECTION: It's not the rewrite rule... is the FilesMatch rule that protects certain files and directories.

轉載註明原文: 為什麽在通過幹凈的URL查看Drupal自定義菜單項時會出現403錯誤?