You could use nodes with the same dimensions, you can achieve it here for example by setting a minimum width for all nodes, similar for the height:
\begin{tikzpicture}[every node/.style={minimum width = 20ex}]
% Tell it where the nodes are
\node (A) {$short expression$};
\node (B) [below=of A] {$long expression$};
\node (C) [right=of A] {$short expression$};
\node (D) [right=of B] {$long expression$};
% Tell it what arrows to draw
\draw[-stealth] (A)-- node[left] {} (B);
\draw[stealth-] (B)-- node [below] {} (D);
\draw[stealth-] (A)-- node [above] {} (C);
\draw[-stealth] (C)-- node [right] {} (D);,
\end{tikzpicture}
If you don't like to have equal widths, but wish to have a rectangle, you can get horizontal and vertical lines also with different dimensions in such a way:
\draw[-stealth] (C) -- node {} (C|-D.north);
such as in
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node (A) {$A\times B$};
\node (B) [below=of A] {$\displaystyle\frac{B}{A}$};
\node (C) [right=of A] {$C$};
\node (D) [right=of B] {$A\times B\times C$};
\draw[-stealth] (A)-- node[left] {} (B);
\draw[stealth-] (B)-- node [below] {} (D);
\draw[stealth-] (A)-- node [above] {} (C);
\draw[-stealth] (C)-- node {} (C|-D.north);
\end{tikzpicture}
\end{document}

Generally try correct positioning first, as Tom wrote. Here, below=of C for D could center D horizontally with C, but then vertical centering with B is lost. It can be corrected in any way, but I think it's good do know that you can get a vertical or horizontal lines using |- or -| relation expressions.
\timesin one but not the other.) – Ryan Reich Dec 12 '11 at 21:15