您在這裡

如何只讓用戶訪問 view/username, 禁止訪問 node/number

say2sky's 的頭像
say2sky 在 2008-06-19 (四) 05:40 發表

現在做一個應用項目,全部的用戶資訊的輸入都是通過 cck 中的 textfield/data field 和 select list, 全部的資訊展示都是通過 views 列表(table).

在這種情況下,如果通過路徑 node/number 訪問頁面, 顯示就會非常的雜亂和零碎, 不能有序的排列

我的問題是:
為了讓用戶只能看到有規則的結構化的資訊展示,如何只讓用戶訪問 view/username, 禁止訪問 node/number

試了一下Global Redirect模組, 我說一下我的理解和問題

Global Redirect模組是針對定義了路徑(path)的別名(alias)時的情況, 當它發現有定義了alias時,它就會中斷所有對原來路徑的訪問,而將訪問重定向到這個新的別名

但是對我的情況,需要對所有新建立的內容都跳轉到view/username路徑,但是問題是

1)事先不知道內容的nid, 就不能事先建立alias, 所以每個新的node在建立的時候是沒有alias的
2)view/nusername是一個view列表形式的展示,它和node/nid不是一一對應的關系,也阻礙了建立alias

不知我的理解對不對。

謝謝建議, 我嘗試了PathAuto 模組, 確實它可以按照自己定義pattern去將內容建立alias. 是一個很好的自動設置alias的模組。

從我的需要來說, 還是有差異。我要一個能禁止訪問原始的內容,也不要通過alias去訪問它們。而是通過定義的view去訪問它們。

我還沒有找到好辦法去解決這個問題。

看來global redirect可以達到吧

Why?

Once enabled, an alias provides a nice clean URL for a path on a site. However Drupal does not remove the old path (eg node/1234). The problem is that you now have two URLs representing the same content. This is dangerous territory for duplicate pages which can get you sandboxed by the search engines!

--
from open mind to open source~

--
from open mind to open source~

謝謝 jimmy 和 charlesc

alias只是名稱的改變和替代,它和原始的頁面是相同的,並不是顯示方法和格式的改變。

global redirect只是達到也一個名稱代替了另一個,當用原來的路徑去訪問時global redirect將它自動跳轉到新的名稱(alias)顯示方式沒有改變。

我的用戶輸入內容都是很短的,但是項目很多,而且每天上傳的內容項目是相同的,我就用view做了一個表,每天一行(就像數據庫表中的一個記錄)這樣排列整齊也便于比較

所以我希望能禁止通過node/nid訪問, 只能通過view/username這個整齊的排列方式來顯示許多天用戶上傳的資訊的一個列表

那改 node.tpl.php

if ($page){
GLOBAL $user;
drupal_goto('view/'.$user->name);
}

強迫整頁顯示的時候 跳到 view/user name 的路徑去
不知道這樣能不能達成你想要的效果

謝謝hom, 謝謝 jimmy 和 charlesc

這正是我想要的效果直接的跳轉到view頁面,隱藏node/nid.

我甚至想在 modules/cck/content.module中加語句。
還是 hom 建議的在node.tpl.php添加是更好的辦法。

我又進了一大步。