Index: src/wp-includes/canonical.php
===================================================================
--- src/wp-includes/canonical.php	(revision 46091)
+++ src/wp-includes/canonical.php	(working copy)
@@ -56,7 +56,7 @@
 		}
 	}
 
-	if ( is_trackback() || is_search() || is_admin() || is_preview() || is_robots() || ( $is_IIS && ! iis7_supports_permalinks() ) ) {
+	if ( is_trackback() || is_search() || is_admin() || is_preview() || ( $is_IIS && ! iis7_supports_permalinks() ) ) {
 		return;
 	}
 
@@ -530,6 +530,11 @@
 		$redirect['host'] = $original['host'];
 	}
 
+	//Even if the permalink structure ends with a slash, remove slash robots.txt.
+	if ( is_robots() ) {
+		$redirect['path'] = untrailingslashit( $redirect['path'] );
+	}
+
 	$compare_original = array( $original['host'], $original['path'] );
 
 	if ( ! empty( $original['port'] ) ) {
Index: tests/phpunit/tests/canonical/robots.php
===================================================================
--- tests/phpunit/tests/canonical/robots.php	(nonexistent)
+++ tests/phpunit/tests/canonical/robots.php	(working copy)
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * @group canonical
+ * @group rewrite
+ * @group query
+ */
+class Tests_Canonical_Robots extends WP_Canonical_UnitTestCase {
+
+	function setUp() {
+		parent::setUp();
+	}
+
+	function test_robots_url() {
+		$this->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' );
+		$this->assertCanonical('/robots.txt', '/robots.txt' );
+		$this->assertCanonical('/robots.txt/', '/robots.txt' );
+	}
+
+}
