Index: wp-includes/default-constants.php
===================================================================
--- wp-includes/default-constants.php	(revision 16258)
+++ wp-includes/default-constants.php	(working copy)
@@ -126,6 +126,14 @@
 	 */
 	if ( !defined( 'MUPLUGINDIR' ) )
 		define( 'MUPLUGINDIR', 'wp-content/mu-plugins' ); // Relative to ABSPATH.  For back compat.
+
+	/**
+	 * Allows for a different path to be used to access the wp-admin directory, without renaming the directory.
+	 *
+	 * @since 3.1.0
+	 */
+	if ( !defined('WP_ADMIN_URL') )
+		define( 'WP_ADMIN_URL', 'wp-admin' );
 }
 
 /**
Index: wp-includes/link-template.php
===================================================================
--- wp-includes/link-template.php	(revision 16258)
+++ wp-includes/link-template.php	(working copy)
@@ -2054,7 +2054,7 @@
  * @return string Admin url link with optional path appended
 */
 function get_admin_url( $blog_id = null, $path = '', $scheme = 'admin' ) {
-	$url = get_site_url($blog_id, 'wp-admin/', $scheme);
+	$url = get_site_url($blog_id, WP_ADMIN_URL.'/', $scheme);
 
 	if ( !empty($path) && is_string($path) && strpos($path, '..') === false )
 		$url .= ltrim($path, '/');
@@ -2223,7 +2223,7 @@
  * @return string Admin url link with optional path appended
 */
 function network_admin_url( $path = '', $scheme = 'admin' ) {
-	$url = network_site_url('wp-admin/network/', $scheme);
+	$url = network_site_url(WP_ADMIN_URL.'/network/', $scheme);
 
 	if ( !empty($path) && is_string($path) && strpos($path, '..') === false )
 		$url .= ltrim($path, '/');
@@ -2242,7 +2242,7 @@
  * @return string Admin url link with optional path appended
 */
 function user_admin_url( $path = '', $scheme = 'admin' ) {
-	$url = network_site_url('wp-admin/user/', $scheme);
+	$url = network_site_url(WP_ADMIN_URL.'/user/', $scheme);
 
 	if ( !empty($path) && is_string($path) && strpos($path, '..') === false )
 		$url .= ltrim($path, '/');
Index: wp-admin/admin.php
===================================================================
--- wp-admin/admin.php	(revision 16258)
+++ wp-admin/admin.php	(working copy)
@@ -29,6 +29,12 @@
 
 require_once(dirname(dirname(__FILE__)) . '/wp-load.php');
 
+$request_path = array_shift(explode('/',$_SERVER['REQUEST_URI']));
+if (array_shift($request_path) != WP_ADMIN_URL) {
+	wp_redirect(admin_url(implode('/', $request_path)));
+	exit;
+}
+
 if ( get_option('db_upgraded') ) {
 	$wp_rewrite->flush_rules();
 	update_option( 'db_upgraded',  false );
