Setup pretty URLs and prefer them.
authorEdward Z. Yang <edwardzyang@thewritingpot.com>
Mon, 27 Apr 2009 23:17:07 +0000 (27 19:17 -0400)
committerEdward Z. Yang <edwardzyang@thewritingpot.com>
Mon, 27 Apr 2009 23:17:07 +0000 (27 19:17 -0400)
Signed-off-by: Edward Z. Yang <edwardzyang@thewritingpot.com>
htaccess.php

index 199a8d7..4392084 100644 (file)
@@ -20,13 +20,13 @@ if (file_exists('.htaccess')) {
 
     // do time check
     $files_to_check = array(
-        '.htaccess.in',
         XHTMLCOMPILER . '/config.php',
         XHTMLCOMPILER . '/config.default.php',
         XHTMLCOMPILER . '/config.smoketest.php',
         XHTMLCOMPILER . '/conf/config.php',
         XHTMLCOMPILER . '/htaccess.php',
         'redirects.txt',
+        '.htaccess.in',
     );
 
     $mtime_htaccess = filemtime('.htaccess');
@@ -122,6 +122,17 @@ foreach ($allowed_dirs as $dir => $recursive) {
 }
 
 $full_dir_exp = implode('|', $big_exp);
+
+// allow pretty extension-less URLs for HTML pages
+// this could be generalized for other URLs
+$n[] = 'RewriteCond %{REQUEST_FILENAME} !-f';
+$n[] = 'RewriteCond %{HTTP_ACCEPT} text/html';
+$n[] = "RewriteRule ^(($full_dir_exp)[^/.]+)$ \$1.html [N]";
+
+// prefer the extension-less URL
+$n[] = "RewriteRule ^(($full_dir_exp)[^/]+)\.html$ \$1 [NS,R=301]";
+
+// basic redirection if it doesn't exist
 $n[] = 'RewriteCond %{REQUEST_FILENAME} !-f [OR]';
 $n[] = 'RewriteCond %{QUERY_STRING} purge=1 [OR]';
 $n[] = 'RewriteCond %{HTTP_COOKIE} purgatory=1';
@@ -167,4 +178,9 @@ $contents = str_replace($identifier_here, implode($n, PHP_EOL), $contents);
 file_put_contents('.htaccess', $contents);
 chmod('.htaccess', 0644);
 
+if (is_cli()) {
+    echo "Okay: New .htaccess file successfully written\n";
+    exit;
+}
+
 ?><h1>200: Okay</h1>New <tt>.htaccess</tt> file successfully written