<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AskApache &#187; Search Results  &#187;  css</title>
	<atom:link href="http://www.askapache.com/search/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.askapache.com</link>
	<description>Advanced Web Development</description>
	<lastBuildDate>Thu, 26 Apr 2012 11:29:28 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Show or Hide WordPress Admin Bar Plugin</title>
		<link>http://www.askapache.com/wordpress/hide-admin-bar.html</link>
		<comments>http://www.askapache.com/wordpress/hide-admin-bar.html#comments</comments>
		<pubDate>Thu, 19 Apr 2012 06:15:14 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress Plugin]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=7121</guid>
		<description><![CDATA[<p><a class="IFL" href="http://www.askapache.com/wordpress/hide-admin-bar.html"><img src="http://uploads.askapache.com/2012/04/profile-no-admin-bar-300x258.png" alt="WordPress No Admin Bar" title="WordPress No Admin Bar" width="300" height="258" /></a>The Admin Bar in WordPress is always shown when in the backend administration area no matter what.<br /><br />You are given the option to show/hide the admin bar when <em>viewing the site</em>, but there is no option to show/hide the admin bar when <em>using the backend</em>... So I created a plugin to provide that option on profile pages.<br /><br /><em>Why hide the admin bar in backend?</em><br />Normally I like the admin-bar and usually have it enabled, but it's nice to be able to switch it on/off from the "Edit Profile" page.  The biggest reason for not loading/showing the admin_bar in the backend is <strong>SPEED</strong>.  Here are 2 instances where I hide it-<br /><br /> &#160;&#160;&#160;&#160;&#183; <strong>Sites with many authors/admins</strong><br /> &#160;&#160;&#160;&#160;&#183; <strong>Moderating Comments on a Mobile Phone</strong><br /><br />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/wordpress/hide-admin-bar.html"></a><a href="http://www.askapache.com/wordpress/hide-admin-bar.html"><cite>AskApache.com</cite></a></p><p><a class="IFL" href="http://uploads.askapache.com/2012/04/profile-no-admin-bar.png"><img src="http://uploads.askapache.com/2012/04/profile-no-admin-bar.png" alt="WordPress No Admin Bar" title="WordPress No Admin Bar" width="537" height="462" /></a>The Admin Bar in WordPress is always shown when in the backend administration area no matter what.<br /><br />You are given the option to show/hide the admin bar when <em>viewing the site</em>, but there is no option to show/hide the admin bar when <em>using the backend</em>... So I created a plugin to provide that option on profile pages.<br /><br /><em>Why hide the admin bar in backend?</em><br />Normally I like the admin-bar and usually have it enabled, but it's nice to be able to switch it on/off from the "Edit Profile" page.  The biggest reason for not loading/showing the admin_bar in the backend is <strong>SPEED</strong>.  Here are 2 instances where I hide it-<br /><br /> &nbsp;&nbsp;&nbsp;&nbsp;&middot; <strong>Sites with many authors/admins</strong><br /> &nbsp;&nbsp;&nbsp;&nbsp;&middot; <strong>Moderating Comments on a Mobile Phone</strong><br /><br />
I occasionally enjoy moderating blog comments using my Android mobile phone and a browser like Opera or Dolphin.... hiding the admin_bar improves Load Speed, Page Rendering Speed, and Scroll Speed. Basically everything.<br /><br />The wp-admin-bar causes additional CSS, JavaScript, and HTML to be added to every page, increasing request size and time of every request!  The jQuery used for the admin_bar keeps it floating at the top using javascript, meaning it gets executed on resize/scroll/load - MAJOR PAIN!<br class="C" /></p>


<h2>Plugin for Hiding/Showing the WP AdminBar</h2>
<p><img class="IFL" src="http://uploads.askapache.com/2012/04/profile-with-adminbar.png" alt="WordPress with Admin Bar" title="WordPress with Admin Bar" width="537" height="462" /><br /><br /><br /><br /><br /><br />This plugin provides the option of hiding the admin bar when in_admin.  It not only hides the admin_bar, it actually prevents the admin_bar class from even loading, at least in WP version 3.4-beta2-20509 thanks to the <code>wp_admin_bar_class</code> filter.<br /><br />Follow the Installation steps below and/or read on to see how it works.. it's an incredibly simple plugin and easy to extend for other purposes.<br class="C" /></p>


<h3>Installation Steps</h3>
<ol>
<li>Download the plugin file: <a href='http://uploads.askapache.com/2012/04/askapache-adminbar-prefs.txt'>askapache-adminbar-prefs.txt</a></li>
<li>Save to <code>/wp-content/plugins/askapache-adminbar-prefs/askapache-adminbar-prefs.php</code></li>
<li>Enable/Disable the plugin from the Plugins Page</li>
<li>Show/Hide admin_bar from the 'Edit Profile' Page</li>
</ol>

<h3>Add Checkbox Option to Profile Page</h3>
<pre>
function askapache_adminbar_personal_options( $profileuser )
{
 global $wpdb, $wp_query;
 $show_admin_bar_backend=_get_admin_bar_pref( &#039;backend&#039;, $profileuser-&gt;ID );
?&gt;
&lt;tr class="show-admin-bar-backend"&gt;
&lt;th scope="row"&gt;Toolbar2&lt;/th&gt;
&lt;td&gt;&lt;fieldset&gt;&lt;legend class="screen-reader-text"&gt;&lt;span&gt;Toolbar2&lt;/span&gt;&lt;/legend&gt;
&lt;label for="admin_bar_backend"&gt;
&lt;input name="admin_bar_backend" type="checkbox" id="admin_bar_backend" value="1"&lt;?php checked( _get_admin_bar_pref( &#039;backend&#039;, $profileuser-&gt;ID ) ); ?&gt; /&gt;
Show Toolbar when in backend&lt;/label&gt;&lt;br /&gt;
&lt;/fieldset&gt;
&lt;/td&gt;
&lt;/tr&gt;&lt;?php
}
add_action( &#039;personal_options&#039;, &#039;askapache_adminbar_personal_options&#039;, 10, 1 );
</pre>



<h3>Save preference when a profile updated</h3>
<pre>
function askapache_adminbar_handle_post($useridtoedit)
{
 global $wpdb, $wp_query, $current_user;
 $show_admin_bar_backend=_get_admin_bar_pref( &#039;backend&#039;, $useridtoedit );
 
 $userID=(int)$useridtoedit;
 if ( !current_user_can(&#039;edit_user&#039;, $userID) ) wp_die(__(&#039;You do not have permission to edit this user.&#039;));
 
 $show_admin_bar_backend=(isset( $_POST[&#039;admin_bar_backend&#039;] ) ? &#039;true&#039; : &#039;false&#039;);
 update_user_option($userID, "show_admin_bar_backend", $show_admin_bar_backend);
}
add_action( &#039;personal_options_update&#039;, &#039;askapache_adminbar_handle_post&#039;, 10, 1);
add_action( &#039;edit_user_profile_update&#039;, &#039;askapache_adminbar_handle_post&#039;, 10, 1);
</pre>




<h3>Remove admin_bar from backend</h3>
<p>Now we need to hook into <code>init</code> to either show/hide the admin_bar while in the backend (<code>in_admin()</code>) based on the users preference.</p>
<ol>
<li>Fetches the users preference for showing the admin_bar in the backend</li>
<li>Removes the wp_admin_bar class from even loading (<code>wp_admin_bar_class</code> filter)</li>
<li>Returns false to the <code>show_admin_bar</code> filter</li>
<li>Overrules the <code>admin-bar</code> css applied to the body</li>
</ol>
<pre>
function askapache_adminbar_personal_options_init()
{
 global $wpdb, $wp_query, $current_user;
 $show_admin_bar_backend=_get_admin_bar_pref( &#039;backend&#039;, $current_user-&gt;ID );
 if(!$show_admin_bar_backend &amp;&amp; is_admin())
 {
  add_filter(&#039;wp_admin_bar_class&#039;, create_function(&#039;&#039;, &#039;return "none".rand(1000,666666);&#039;), 9999999);
  add_filter(&#039;show_admin_bar&#039;, create_function(&#039;&#039;, &#039;return false;&#039;), 999999);
  add_action(&#039;admin_head&#039;, create_function(&#039;&#039;, &#039;echo \&#039;&lt;style type="text/css"&gt;body.admin-bar {padding-top:0 !important;}&lt;/style&gt;\&#039;;&#039;));
 }
}
add_action( &#039;init&#039;, &#039;askapache_adminbar_personal_options_init&#039;,0); 
</pre>

<h2>Add to Core WordPress</h2>
<p>I'm sure this will be added to the dev version of WordPress by someone (volunteers?) and eventually integrated into stable.  Note this was built and used on WordPress 3.4-beta2-20509.</p><p><a href="http://www.askapache.com/wordpress/hide-admin-bar.html"></a><a href="http://www.askapache.com/wordpress/hide-admin-bar.html">Show or Hide WordPress Admin Bar Plugin</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/wordpress/hide-admin-bar.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimized Vimrc with 256 Colorscheme</title>
		<link>http://www.askapache.com/linux/fast-vimrc.html</link>
		<comments>http://www.askapache.com/linux/fast-vimrc.html#comments</comments>
		<pubDate>Sun, 26 Feb 2012 18:15:32 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=7062</guid>
		<description><![CDATA[<p><a class="IFL" href="http://www.askapache.com/linux/fast-vimrc.html"><img src="http://uploads.askapache.com/2012/02/vimrc-colorscheme.png" alt="askapachecode 256color colorscheme and vimrc screenshot" title="askapachecode 256color colorscheme and vimrc screenshot" width="525" height="277" class="size-full wp-image-7074" /></a><strong>This is not your everyday vimrc</strong>.  This is <em>my</em> personalized vimrc.. works especially great on remote servers, in tmux, screen, etc. <br /><br />This doesn't require a git checkout, a vim update, a bash update, an OS update, a plugin.  No.  1 vimrc, 1 colorscheme, just use curl to download and it's on.  I use this on <a href="http://archlinux.org/">Arch Linux</a>, NetBSD, FreeBSD, OpenBSD, Debian, Ubuntu, Cent OS, Red Hat, and that's mostly it so far. <br />If you aren't already using vim as your primary editor in a powerful way, you are gonna owe me for this.<br class="C" /></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/linux/fast-vimrc.html"></a><a href="http://www.askapache.com/linux/fast-vimrc.html"><cite>AskApache.com</cite></a></p><p>This is 90% geared for purely console/terminal/pty/tty/ssh/putty/telnet/tmux/screen users.  I've only just the past couple years started understanding why it was key to learn vim, in the past I never had the patience for it and preferred nano-like editors.  Now vim is all I use when on linux, it's so much more productive.. especially with a customized vimrc file.  This doesn't require a git checkout, a vim update, a bash update, an OS update, a plugin.  No.  This is a single file that I use on <a href="http://archlinux.org/">Arch Linux</a>, NetBSD, FreeBSD, OpenBSD, Debian, Ubuntu, Cent OS, Red Hat, and that's it so far.  This is geared for users who use SSH more than anything else.  Of course, it works perfect on an X enabled box locally as well.</p>

<h2>ScreenShot</h2>
<p><a href="http://uploads.askapache.com/2012/02/vimrc-screenshot.png"><img src="http://uploads.askapache.com/2012/02/vimrc-screenshot.png" alt="Screenshot of this vimrc in action" title="Screenshot of this vimrc in action" width="911" height="987" class="size-full wp-image-7073" /></a></p>

<h2>Setup</h2>
<p>I install this as <code>/etc/vimrc</code> if possible.  Individual users can use a vim config file in their home directories.</p>
<pre>source /etc/vimrc</pre>
<p>To install for a single user just save it in their home dir at <code>/home/username/.vimrc</code></p>

<h2>Portability</h2>
<p>For the portability needed to work on many different systems, this doesn't rely on any plugins other than those built into the default installation of vim 7.0.
It works well on all types of consoles, and depending on the TERM environment variable (and whether it has the right term capabilities) it will load 256 color support or not.  Usually on a new system I just scp this right over and it works without any modifications.  But an ongoing Work in progress.</p>



<h2>Optimized Vimrc</h2>
<p>Download - <a href='http://uploads.askapache.com/2012/02/vimrc.txt'>Optimized vimrc</a></p>
<pre>" Updated: Wed Feb 22 13:25:23 2012 by galileo@galileo
&nbsp;
" For all key mappings like &#039;, .&#039; to reload vimrc
let maplocalleader=&#039;,&#039;
&nbsp;
" BACKUPS, SWAPFILES, VIEWDIR, TMPDIR  "{{{1
" ================================================================================================================================================================
&nbsp;
" SET RUNTIMEPATH {{{3
if isdirectory(expand("$HOME/.vim"))
  let $VIMRUNTIME=expand("$HOME/.vim")
  set runtimepath=$VIMRUNTIME
endif
&nbsp;
" IF BKDIR IS NOT SET OR EMPTY, SET {{{3
if $BKDIR == ""
  let $BKDIR=expand("$HOME/.bk")
  if !isdirectory(expand("$BKDIR"))
    call mkdir(expand("$BKDIR"), "p", 0700)
  endif
endif
&nbsp;
" MAKE DIRS IF mkdir exists {{{3
if exists("*mkdir")
  if !isdirectory(expand("$BKDIR/.vim/viewdir"))|call mkdir(expand("$BKDIR/.vim/viewdir"), "p", 0700)|endif
  if !isdirectory(expand("$BKDIR/.vim/tmp"))|call mkdir(expand("$BKDIR/.vim/tmp"), "p", 0700)|endif
  if !isdirectory(expand("$BKDIR/.vim/backups"))|call mkdir(expand("$BKDIR/.vim/backups"), "p", 0700)|endif
endif
&nbsp;
" SETTINGS USING NEW DIRS {{{3
let &amp;dir=expand("$BKDIR") . "/.vim"
let &amp;viewdir=expand("$BKDIR") . "/.vim/viewdir"
let &amp;backupdir=expand("$BKDIR") . "/.vim/backups"
"let &amp;verbosefile=expand("$BKDIR") . "/.vim/vim-messages.
&nbsp;
" VIMINFO {{{3
" COMMENTED OUT {{{4
"  "       Maximum number of lines saved for each register
"  %       When included, save and restore the buffer lis
"  &#039;       Maximum number of previously edited files for which the marks are remembere
"  /       Maximum number of items in the search pattern history to be saved
"  :        Maximum number of items in the command-line history
"  &lt;       Maximum number of lines saved for each register.
"   @       Maximum number of items in the input-line history
"  h       Disable the effect of &#039;hlsearch&#039; when loading the viminfo
"  n       Name of the viminfo file.  The name must immediately follow the &#039;n&#039;.  Must be the last oneEnvironment variables are expanded when opening the file, not when setting the option
"  r       Removable media.  The argument is a string
"  s       Maximum size of an item in Kbyte
"   }}}4 COMMENTED OUT
let &amp;viminfo="%200,&#039;200,/800,h,&lt;500,:500,s150,r/tmp,r" . expand("$BKDIR") . "/.vim/tmp,n" . expand("$BKDIR") ."/.vim/.vinfo"
&nbsp;
" CUSTOM FUNCTIONS "{{{1
" ================================================================================================================================================================
if !exists("AskApacheLoaded")
  let AskApacheLoaded=1
&nbsp;
  " FUNCTION - LastMod {{{3
  " Warning, this is controlled by an autocmd triggered when closing the file that updates the file (in a great way)
  " Updated: Wed Feb 22 13:25:23 2012 by galileo@galileo
  function! LastMod()
    exe "silent! 1,20s/Updated: .*/" . printf(&#039;Updated: %s by %s@%s&#039;, strftime("%c"), expand("$LOGNAME"), hostname()) . "/e"
  endfunction
&nbsp;
  " FUNCTION - LastModNow {{{3
  " An even better version than LastMod()
  function! LastModNow()
    call setline(line(&#039;.&#039;), printf(&#039;%sUpdated: %s by %s@%s&#039;, printf(&amp;commentstring, &#039; &#039;), strftime("%c"), expand("$LOGNAME"), hostname()))
    "printf(&#039;%sUpdated: %s by %s@%s&#039;, printf(&amp;commentstring, &#039; &#039;), strftime("%c"), expand("$LOGNAME"), hostname())\|dd\|j\|dd&lt;CR&gt;&lt;ESC&gt;
    "printf(&#039;Updated: %s by %s %s&#039;, strftime("%c"), expand("$LOGNAME@$HOSTNAME")) ."/e"
  endfunction
&nbsp;
  " FUNCTION - AppendModeline {{{3
  " Append modeline after last line in buffer.  Use substitute() instead of printf() to handle &#039;%%s&#039; modeline
  function! AppendModeline()
    let l:modeline = printf(" vim: set ft=%s ts=%d sw=%d tw=%d foldmethod=%s :", &amp;filetype, &amp;tabstop, &amp;shiftwidth, &amp;textwidth, &amp;foldmethod)
    let l:modeline = substitute(&amp;commentstring, "%s", l:modeline, "")
    call append(line("$"), l:modeline)
  endfunction
&nbsp;
  " FUNCTION - LastModAAZZZ {{{3
  " AA_UPDATED=&#039;01/24/12-00:56:00&#039;
  function! LastModAAZZZ()
    exe "1,50s/AA_UPDATED=.*/AA_UPDATED=&#039;" . strftime("%c") . "&#039;"
  endfunction
&nbsp;
  " FUNCTION - StripTrailingWhitespace {{{3
  " automatically remove trailing whitespace before write
  function! StripTrailingWhitespace()
    normal mZ
    %s/\s\+$//e
    if line("&#039;Z") != line(".")|echo "Stripped whitespace\n"|endif
    normal `Z
  endfunction
&nbsp;
  " FUNCTION - MyTabL {{{3
  function! MyTabL()
    let s = &#039;&#039;|let t = tabpagenr()|let i = 1
    while i &lt;= tabpagenr(&#039;$&#039;)
      let bl = tabpagebuflist(i)|let wn = tabpagewinnr(i)
      let s .= &#039;%&#039; . i . &#039;T&#039;. (i == t ? &#039;%1*&#039; : &#039;%2*&#039;) . &#039;%*&#039; . (i == t ? &#039; %#TabLineSel# &#039; : &#039;%#TabLine#&#039;)
      let file = (i == t ? fnamemodify(bufname(bl[wn - 1]), &#039;:p&#039;) : fnamemodify(bufname(bl[wn - 1]), &#039;:t&#039;) )|if file == &#039;&#039;|let file = &#039;[No Name]&#039;|endif
      let s .= i.&#039; &#039;. file .(i == t ? &#039; &#039; : &#039;&#039;)|let i += 1
    endwhile
    let s .= &#039;%T%#TabLineFill#%=&#039; . (tabpagenr(&#039;$&#039;) &gt; 1 ? &#039;%999XX&#039; : &#039;X&#039;)
    return s
  endfunction
&nbsp;
  " FUNCTION - DiffWithSaved {{{3
  " Diff with saved version of the file
  function! s:DiffWithSaved()
    let filetype=&amp;ft
    diffthis
    vnew | r # | normal! 1Gdd
    diffthis
    exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
  endfunction
  com! DiffSaved call s:DiffWithSaved()
&nbsp;
  " FUNCTION - ShowWhitespace() {{{3
  function! ShowWhitespace(flags)
    let bad = &#039;&#039;
    let pat = []
    for c in split(a:flags, &#039;\zs&#039;)
      if c == &#039;e&#039;
        call add(pat, &#039;\s\+$&#039;)
      elseif c == &#039;i&#039;
        call add(pat, &#039;^\t*\zs \+&#039;)
      elseif c == &#039;s&#039;
        call add(pat, &#039; \+\ze\t&#039;)
      elseif c == &#039;t&#039;
        call add(pat, &#039;[^\t]\zs\t\+&#039;)
      else
        let bad .= c
      endif
    endfor
&nbsp;
    if len(pat) &gt; 0
      let s = join(pat, &#039;\|&#039;)
      exec &#039;syntax match ExtraWhitespace "&#039;.s.&#039;" containedin=ALL&#039;
    else
      syntax clear ExtraWhitespace
    endif
&nbsp;
    if len(bad) &gt; 0|echo &#039;ShowWhitespace ignored: &#039;.bad|endif
  endfunction
&nbsp;
  " FUNCTION - ToggleShowWhitespace {{{3
  " I use this all the time, it&#039;s mapped to , ts
  function! ToggleShowWhitespace()
    if !exists(&#039;b:ws_show&#039;)|let b:ws_show = 0|endif
    if !exists(&#039;b:ws_flags&#039;)|let b:ws_flags = &#039;est&#039;|endif
    let b:ws_show = !b:ws_show
    if b:ws_show|call ShowWhitespace(b:ws_flags)|else|call ShowWhitespace(&#039;&#039;)|endif
  endfunction
&nbsp;
endif
&nbsp;
" DYNAMIC SETTINGS / COLORS / TERMINAL {{{1
" ================================================================================================================================================================
&nbsp;
" DISABLE MOUSE NO GOOEYS {{{3
if has(&#039;mouse&#039;)|set mouse=|endif
&nbsp;
" SET TITLESTRING {{{3
if has(&#039;title&#039;)|set titlestring=%t%(\ [%R%M]%)|endif
&nbsp;
" SET TABLINE {{{3
if exists("*s:MyTabL")|set tabline=%!MyTabL()|endif
&nbsp;
let g:vimsyn_folding=&#039;af&#039;
&nbsp;
"DISABLE FILETYPE-SPECIFIC MAPS {{{3
let no_plugin_maps=1
&nbsp;
"}}}1 DYNAMIC SETTINGS / COLORS / TERMINAL
&nbsp;
" OPTIONS "{{{1
" ===========================================================================================================================================================================
&nbsp;
" BACKUP, FILE OPTIONS {{{2
" ================================================================================
set backup        " Make a backup before overwriting a file.  Leave it around after the file has been successfully written.
set backupcopy=auto " When writing a file and a backup is made, this option tells how it&#039;s done.  This is a comma separated list of words. - value: yes,no,auto - no:rename the file and write a new one
&nbsp;
set swapfile
set swapsync=fsync
&nbsp;
"}}}2 BACKUP, FILE OPTIONS
&nbsp;
" BASIC SETTINGS "{{{2
" ================================================================================
set nocompatible    " vim, not vi.. must be first, because it changes other options as a side effect
set modeline
&nbsp;
set statusline=%M%h%y\ %t\ %F\ %p%%\ %l/%L\ %=[%{&amp;ff},%{&amp;ft}]\ [a=\%03.3b]\ [h=\%02.2B]\ [%l,%v]
set title titlelen=150 titlestring=%(\ %M%)%(\ (%{expand(\"%:p:h\")})%)%(\ %a%)\ -\ %{v:servername}
&nbsp;
"set tags=tags;/      " search recursively up for tags
&nbsp;
set ttyfast        " we have a fast terminal
set scrolljump=5    " when scrolling up down, show at least 5 lines
"set ttyscroll=999    " make vim redraw screen instead of scrolling when there are more than 3 lines to be scrolled
&nbsp;
"set tw=500        " default textwidth is a max of 5
&nbsp;
set undolevels=10    " 50 undos - saved in memory
set updatecount=250    " switch every 250 chars, save swap
&nbsp;
set whichwrap+=b,s,&lt;,&gt;,h,l,[,]      " backspaces and cursor keys wrap to
"set wildignore+=*.o,*~,.lo,*.exe,*.bak  " ignore object files
"set wildmenu              " menu has tab completion
"set wildmode=longest:full        " *wild* mode
set nowrap
&nbsp;
set autoindent smartindent    " auto/smart indent
&nbsp;
set autoread          " watch for file changes
&nbsp;
set backspace=indent,eol,start  " backspace over all kinds of things
&nbsp;
set cmdheight=1          " command line two lines high
set complete=.,w,b,u,U,t,i,d  " do lots of scanning on tab completion
set cursorline          " show the cursor line
"set enc=utf-8 fenc=utf-8    " utf-8
&nbsp;
set history=3000        " keep 3000 lines of command line history
&nbsp;
set keywordprg=TERM=mostlike\ man\ -s\ -Pless
&nbsp;
set laststatus=2
&nbsp;
"set lazyredraw          " don&#039;t redraw when don&#039;t have to
set linebreak          " wrap at &#039;breakat&#039; instead of last char
set magic            " Enable the "magic"
&nbsp;
set maxmem=25123  " 24 MB -  max mem in Kbyte to use for one buffer.  Max is 2000000
&nbsp;
set noautowrite          " don&#039;t automagically write on :next
&nbsp;
set noexpandtab          " no expand tabs to spaces"
set noruler          " show the line number on the bar
set nospell
set nohidden          " close the buffer when I close a tab (I use tabs more than buffers)
&nbsp;
set noerrorbells visualbell t_vb= " Disable ALL bells
&nbsp;
set number          " line numbers
&nbsp;
set pastetoggle=&lt;F11&gt;
&nbsp;
set scrolloff=3        " keep at least 3 lines above/below
set shiftwidth=3      " shift width
&nbsp;
set showcmd          " Show us the command we&#039;re typing
set showfulltag        " show full completion tags
set showmode        " show the mode all the time
&nbsp;
set sidescroll=2      " if wrap is off, this is fasster for horizontal scrolling
set sidescrolloff=2      "keep at least 5 lines left/right
&nbsp;
set noguipty
&nbsp;
set splitright
set splitbelow
&nbsp;
set restorescreen=on " restore screen contents when vim exits -  disable withset t_ti= t_te=
&nbsp;
"set sessionoptions=word,blank,buffers,curdir,folds,globals,help,localoptions,resize,sesdir,tabpages,winpos,winsize
set winheight=25
set winminheight=1  " minimal value for window height
"set winheight=30  " set the minimal window height
set equalalways    " all the windows are automatically sized same
set eadirection=both  " only equalalways for horizontally split windows
&nbsp;
set hlsearch
&nbsp;
set laststatus=2
&nbsp;
set tabstop=4
set softtabstop=4
&nbsp;
set shiftwidth=3
set switchbuf=usetab
&nbsp;
set commentstring=#%s
&nbsp;
set tabpagemax=55
set showtabline=2    " 2 always, 1 only if multiple tabs
set smarttab      " tab and backspace are smart
&nbsp;
set foldmethod=marker
set foldenable
set foldcolumn=6        " the blank left-most bar left of the numbered lines
&nbsp;
set incsearch          " incremental search
"set ignorecase          " search ignoring case
set sc              " override &#039;ignorecase&#039; when pattern has upper case characters
set smartcase          " Ignore case when searching lowercase
&nbsp;
set showmatch          " show matching bracket
set diffopt=filler,iwhite    " ignore all whitespace and sync"
set stal=2
&nbsp;
"}}}1 OPTIONS
&nbsp;
" PLUGIN SETTINGS {{{1
" ================================================================================================================================================================
" Settings for :TOhtml "{{{3
let html_number_lines=1
let html_use_css=1
let use_xhtml=1
"}}}1 PLUGIN SETTINGS
&nbsp;
" COLORSCHEME IF MORE THAN 2 COLORS lol {{{1
" ================================================================================================================================================================
if &amp;t_Co &gt; 2
&nbsp;
  if &amp;term =~ "256"
&nbsp;
    set bg=dark t_Co=256 vb
    let &amp;t_vb="\&lt;Esc&gt;[?5h\&lt;Esc&gt;[?5l"  " flash screen for visual bell
&nbsp;
    if filereadable(expand("$VIMRUNTIME/colors/askapachecode.vim"))
      colorscheme askapachecode
    elseif filereadable(expand("$HOME/.vim/colors/askapachecode.vim"))
      colorscheme askapachecode
    else
      colorscheme default
    endif
&nbsp;
    filetype indent plugin on
    syntax on
&nbsp;
  else
    " things like cfdisk, crontab -e, visudo, vless, etc.
    set term=linux
    set t_Co=8
    syntax off
    filetype indent plugin off
&nbsp;
  endif
&nbsp;
endif
&nbsp;
"}}}1
&nbsp;
" AUTOCOMMANDS "{{{1
" ===========================================================================================================================================================================
"if !exists(":DiffOrig") | command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis | endif
&nbsp;
" auto load extensions for different file types
if has(&#039;autocmd&#039;)
&nbsp;
  if !exists("autocommands_loaded")
    let autocommands_loaded = 1
&nbsp;
    " JUMP TO LAST POS {{{3
    " When editing a file, always jump to the last known cursor position. Don&#039;t do it when the position is invalid or when inside an event handler
    " (happens when dropping a file on gvim). Also don&#039;t do it when the mark is in the first line, that is the default position when opening a file.
    au BufReadPost * if line("&#039;\"") &gt; 1 &amp;&amp; line("&#039;\"") &lt;= line("$") | exe "normal! g`\"" | endif
&nbsp;
    " CLEARMATCHES ON BUFWINLEAVE {{{3
    au BufWinLeave * call clearmatches()
&nbsp;
    " STRIP TRAILING WHITESPACE {{{3
    autocmd BufWritePre *.cpp,*.hpp,*.i :call StripTrailingWhitespace()
&nbsp;
    " AA_ZZZ LAST MOD {{{3
    autocmd BufWritePre,FileWritePre,TabLeave zzz_askapache-bash.sh ks|call LastModAAZZZ()|&#039;s
&nbsp;
    " SET VIM SETTINGS FOR AA_ZZZ SCRIPTS {{{3
    autocmd BufRead /etc/ZZZ/*.sh,.bash_profile,.bash_login,.bashrc,.bash_login_user,.bash_logout setlocal ts=4 sw=3 ft=sh foldmethod=marker tw=500 foldcolumn=7
&nbsp;
    " INSERT CURRENT DATE AND TIME IN A *.SH FILE WHEN WRITING IT {{{3
    autocmd BufWritePre,FileWritePre *.*   ks|call LastMod()|&#039;s
&nbsp;
    " IMPROVE LEGIBILITY {{{3
    autocmd BufRead quickfix setlocal nobuflisted wrap number
&nbsp;
    " SAVE BACKUPFILE AS BACKUPDIR/FILENAME-06-13-1331 {{{3
    autocmd BufWritePre * let &amp;bex = strftime("-%m-%d-%H%M")
&nbsp;
    " TMUX FILETYPE {{{3
    autocmd BufRead tmux.conf,.tmux.conf,.tmux*,*/tmux-sessions/* setlocal filetype=tmux foldmethod=marker
&nbsp;
    " APACHE2 FILETYPE {{{3
    autocmd BufRead /opt/a*/conf/*,/etc/httpd/*.conf setlocal filetype=apache
&nbsp;
    " SH FILETYPES {{{3
    autocmd BufRead *.sh,*.cron,*.bash setlocal filetype=sh
&nbsp;
    " SYSLOG-NG FILETYPE {{{3
    autocmd BufRead syslog-ng.conf setlocal filetype=syslog-ng
&nbsp;
    " COMMENTSTRING FOR VIM "{{{3
    au FileType vim setlocal commentstring="%s
&nbsp;
    " COMMENTSTRING FOR XDEFAULTS "{{{3
    au FileType xdefaults setlocal foldmethod=marker foldlevel=2 commentstring=!%s
&nbsp;
    " VIMRC {{{3
    augroup vimrc
      au BufReadPre * setlocal foldmethod=indent
      au BufWinEnter * if &amp;fdm == &#039;indent&#039; | set foldmethod=manual | endif
      au BufRead *.vim,vimrc,*.vimrc set filetype=vim ts=3 sw=3 tw=500 foldmethod=marker foldcolumn=6
    augroup END
&nbsp;
    " AUTOMKVIEWS {{{3
    " Warning - this will save your settings for each file you edit and restore those settings when opened again - can fill up quick
    au BufWinLeave *.sh,*.conf,*.vim,*.c,*.txt,.htaccess,*.cgi,*.php,*.html,*.conf,vimrc mkview
    au BufWinEnter *.sh,*.conf,*.vim,*.c,*.txt,.htaccess,*.cgi,*.php,*.html,*.conf,vimrc silent loadview
    " }}}3
&nbsp;
    " MAN RUNTIME - TODO REPLACE WITH TMUXES CTRL-M BINDING {{{3
    " Lets you type :Man anymanpage and it will load in vim, color-coded and searchable
    "runtime ftplugin/man.vim
&nbsp;
  endif
&nbsp;
endif
"}}}1
&nbsp;
" MAPS "{{{1
" ===========================================================================================================================================================================
&nbsp;
" FUNCTION MAPS {{{2
" ---------------------------------
" APPEND MODELINE {{{3
map &lt;silent&gt; &lt;LocalLeader&gt;ml :call AppendModeline()&lt;CR&gt;
&nbsp;
" SHOW WHITESPACE {{{3
nnoremap &lt;LocalLeader&gt;ts :call ToggleShowWhitespace()&lt;CR&gt;
&nbsp;
" SUDO A WRITE {{{3
command! W :execute &#039;:silent w !sudo tee % &gt; /dev/null&#039; | :edit!
"cmap w!! %!sudo tee &gt; /dev/null %
" :w !sudo tee &gt; /dev/null %
&nbsp;
" SET TABLINE {{{3
" My Personal Fav, inserts last-modified manually on current line when you press &lt;F12&gt; key
" call setline(1, printf(&#039;%sUpdated: %s by %s@%s&#039;, printf(&amp;commentstring, &#039; &#039;), strftime("%c"), expand("$LOGNAME"), hostname()))
if exists("*s:LastModNow")
  map &lt;silent&gt; &lt;F12&gt; :call LastModNow()&lt;CR&gt;
endif
&nbsp;
" RELOAD VIMRC FILES {{{3
map &lt;LocalLeader&gt;. :mkview&lt;CR&gt;:unlet! AskApacheLoaded autocommands_loaded&lt;CR&gt;:mapclear&lt;CR&gt;:source /etc/vimrc&lt;CR&gt;:echoerr &#039;VIMRC RELOADED&#039;&lt;CR&gt;
&nbsp;
" SCROLLING MAPS {{{3
map &lt;PageDown&gt; :set scroll=0&lt;CR&gt;:set scroll^=2&lt;CR&gt;:set scroll-=1&lt;CR&gt;&lt;C-D&gt;:set scroll=0&lt;CR&gt;
map &lt;PageUp&gt; :set scroll=0&lt;CR&gt;:set scroll^=2&lt;CR&gt;:set scroll-=1&lt;CR&gt;&lt;C-U&gt;:set scroll=0&lt;CR&gt;
nnoremap &lt;silent&gt; &lt;PageUp&gt; &lt;C-U&gt;&lt;C-U&gt;
vnoremap &lt;silent&gt; &lt;PageUp&gt; &lt;C-U&gt;&lt;C-U&gt;
inoremap &lt;silent&gt; &lt;PageUp&gt; &lt;C-\&gt;&lt;C-O&gt;&lt;C-U&gt;&lt;C-\&gt;&lt;C-O&gt;&lt;C-U&gt;
nnoremap &lt;silent&gt; &lt;PageDown&gt; &lt;C-D&gt;&lt;C-D&gt;
vnoremap &lt;silent&gt; &lt;PageDown&gt; &lt;C-D&gt;&lt;C-D&gt;
inoremap &lt;silent&gt; &lt;PageDown&gt; &lt;C-\&gt;&lt;C-O&gt;&lt;C-D&gt;&lt;C-\&gt;&lt;C-O&gt;&lt;C-D&gt;
"}}}3
&nbsp;
" KEY MAPS {{{2
" physically map keys to produce different key, type CTRL-V in insert mode followed by any key to see how vim sees it
" ----------------------------------------
imap &lt;ESC&gt;[8~ &lt;End&gt;
map &lt;ESC&gt;[8~ &lt;End&gt;
&nbsp;
imap &lt;ESC&gt;[7~ &lt;Home&gt;
map &lt;ESC&gt;[7~ &lt;Home&gt;
&nbsp;
" Basic Maps  {{{2
" ----------------------------------------
" TOGGLE PASTE MODE {{{3
map &lt;LocalLeader&gt;pm :set nonumber! foldcolumn=0&lt;CR&gt;
&nbsp;
" REINDENT FILE {{{3
map &lt;LocalLeader&gt;ri G=gg&lt;CR&gt;
&nbsp;
" CLEAR SPACES AT END OF LINE {{{3
map &lt;LocalLeader&gt;cs :%s/\s\+$//e&lt;CR&gt;
&nbsp;
" Y YANKS FROM CURSOR TO $ {{{3
map Y y$
&nbsp;
" DON&#039;T USE EX MODE, USE Q FOR FORMATTING {{{3
map Q gq
map! ^H ^?
&nbsp;
" NEXT SEARCH RESULT {{{3
map &lt;silent&gt; &lt;LocalLeader&gt;cn :cn&lt;CR&gt;
&nbsp;
" WRAP? {{{3
map &lt;silent&gt; &lt;LocalLeader&gt;ww :ww
&nbsp;
" ERR INSERTION {{{3
"map &lt;silent&gt; &lt;LocalLeader&gt;e &lt;Home&gt;A&lt;C-R&gt;=printf(&#039;%s&#039;, &#039;_err "$0 $FUNCNAME:$LINENO FAILED WITH ARGS= $*"&#039;)&lt;CR&gt;&lt;Home&gt;&lt;Esc&gt;
&nbsp;
" CUSTOM LINES FOR CODING {{{3
map &lt;silent&gt; &lt;LocalLeader&gt;l1 &lt;Home&gt;A&lt;C-R&gt;=printf(&#039;%s%s&#039;, printf(&amp;commentstring, &#039; &#039;), repeat(&#039;=&#039;, 160))&lt;CR&gt;&lt;Home&gt;&lt;Esc&gt;
map &lt;silent&gt; &lt;LocalLeader&gt;l2 &lt;Home&gt;A&lt;C-R&gt;=printf(&#039;%s%s&#039;, printf(&amp;commentstring, &#039; &#039;), repeat(&#039;=&#039;, 80))&lt;CR&gt;&lt;Home&gt;&lt;Esc&gt;
map &lt;silent&gt; &lt;LocalLeader&gt;l3 &lt;Home&gt;A&lt;C-R&gt;=printf(&#039;%s%s&#039;, printf(&amp;commentstring, &#039; &#039;), repeat(&#039;-&#039;, 40))&lt;CR&gt;&lt;Home&gt;&lt;Esc&gt;
map &lt;silent&gt; &lt;LocalLeader&gt;l4 &lt;Home&gt;A&lt;C-R&gt;=printf(&#039;%s%s&#039;, printf(&amp;commentstring, &#039; &#039;), repeat(&#039;-&#039;, 20))&lt;CR&gt;&lt;Home&gt;&lt;Esc&gt;
&nbsp;
" CHANGE DIRECTORY TO THAT OF CURRENT FILE {{{3
nmap &lt;LocalLeader&gt;cd :cd%:p:h&lt;CR&gt;
&nbsp;
" CHANGE LOCAL DIRECTORY TO THAT OF CURRENT FILE {{{3
nmap &lt;LocalLeader&gt;lcd :lcd%:p:h&lt;CR&gt;
&nbsp;
" TOGGLE WRAPPING {{{3
nmap &lt;LocalLeader&gt;ww :set wrap!&lt;CR&gt;
nmap &lt;LocalLeader&gt;wo :set wrap&lt;CR&gt;
&nbsp;
" TABS "{{{2
" ---------------------------------
&nbsp;
" CREATE A NEW TAB {{{3
map &lt;LocalLeader&gt;tc :tabnew %&lt;CR&gt;
&nbsp;
" LAST TAB {{{3
map &lt;LocalLeader&gt;t&lt;Space&gt; :tablast&lt;CR&gt;
&nbsp;
" CLOSE A TAB {{{3
map &lt;LocalLeader&gt;tk :tabclose&lt;CR&gt;
&nbsp;
" NEXT TAB {{{3
map &lt;LocalLeader&gt;tn :tabnext&lt;CR&gt;
&nbsp;
" PREVIOUS TAB {{{3
map &lt;LocalLeader&gt;tp :tabprev&lt;CR&gt;
&nbsp;
" FOLDS   "{{{2
" ---------------------------------
" Fold with paren begin/end matching
nmap F zf%
&nbsp;
" When I use ,sf - return to syntax folding with a big foldcolumn
nmap &lt;LocalLeader&gt;sf :set foldcolumn=6 foldmethod=syntax&lt;cr&gt;
"}}}2
&nbsp;
"}}}1
&nbsp;
" HILITE "{{{1
" ===========================================================================================================================================================================
hi NonText cterm=NONE ctermfg=NONE
hi Search cterm=bold ctermbg=99 ctermfg=17
"}}}
&nbsp;
</pre>


<h2>Colorscheme</h2>
<p>Here is a colorscheme file optimized for 256 colors.  It will work if saved in <code>~/.vim/colors/askapachecode.vim</code> or likewise in your runtimepath.  Additionally, you could just paste it in the bottom of the above vimrc.  The code really needs to be cleaned up, but it looks awesome.</p>
<p>Download - <a href='http://uploads.askapache.com/2012/02/askapachecode.txt'>askapachecode - 256 Colors Vim Colorscheme</a></p>
<p><code>~/.vim/colors/askapachecode.vim</code></p>
<pre>
" Vim color file -- askapachecode
" Maintainer: AskApache &lt;webmaster@askapache.com&gt;
" Updated: Wed Feb 22 14:10:54 2012 by galileo@galileo
&nbsp;
set background=dark
hi clear
&nbsp;
if exists("syntax_on")|syntax reset|endif
&nbsp;
let g:colors_name="askapachecode"
&nbsp;
" Vim &gt;= 7.0 specific colors
if version &gt;= 700
 hi CursorLine ctermbg=236
 hi CursorColumn ctermbg=236
 hi MatchParen ctermfg=157 ctermbg=237 cterm=bold
 hi Pmenu ctermfg=255 ctermbg=238
 hi PmenuSel ctermfg=0 ctermbg=148
endif
&nbsp;
" General colors
hi Cursor ctermbg=241
hi Normal ctermfg=253 ctermbg=232
hi NonText ctermfg=244 ctermbg=235
hi LineNr ctermfg=244 ctermbg=232
hi StatusLine ctermfg=253 ctermbg=238 cterm=italic
hi StatusLineNC ctermfg=246 ctermbg=238
hi VertSplit ctermfg=238 ctermbg=238
hi Folded ctermbg=4 ctermfg=248
hi Title ctermfg=254 cterm=bold
hi Visual ctermfg=254 ctermbg=4
hi SpecialKey ctermfg=244 ctermbg=236
&nbsp;
hi pythonOperator ctermfg=103
&nbsp;
hi Search cterm=NONE  
&nbsp;
" basic highlight groups (:help highlight-groups) {{{1
&nbsp;
" text {{{2
hi Normal ctermfg=white ctermbg=black cterm=NONE
hi Folded ctermfg=lightgray ctermbg=black cterm=underline
hi LineNr ctermfg=darkgray ctermbg=NONE cterm=NONE
hi Directory ctermfg=cyan ctermbg=NONE cterm=NONE
hi NonText ctermfg=yellow ctermbg=NONE cterm=NONE
hi SpecialKey ctermfg=green ctermbg=NONE cterm=NONE
&nbsp;
hi DiffAdd ctermfg=white ctermbg=darkblue cterm=NONE
hi DiffChange ctermfg=black ctermbg=darkmagenta cterm=NONE
hi DiffDelete ctermfg=black ctermbg=red cterm=bold
hi DiffText ctermfg=white ctermbg=green cterm=bold
&nbsp;
" borders / separators / menus {{{2
hi FoldColumn ctermfg=lightgray ctermbg=darkgray cterm=NONE
hi SignColumn ctermfg=lightgray ctermbg=darkgray cterm=NONE
hi Pmenu ctermfg=white ctermbg=darkgray cterm=NONE
hi PmenuSel ctermfg=white ctermbg=lightblue cterm=NONE
hi PmenuSbar ctermfg=black ctermbg=black cterm=NONE
hi PmenuThumb ctermfg=gray ctermbg=gray cterm=NONE
&nbsp;
hi StatusLine ctermfg=black ctermbg=white cterm=bold
hi StatusLineNC ctermfg=darkgray ctermbg=white cterm=NONE
hi WildMenu ctermfg=white ctermbg=darkblue cterm=bold
hi VertSplit ctermfg=white ctermbg=white cterm=NONE
&nbsp;
if &amp;t_Co == 256|hi TabLine ctermfg=15 ctermbg=242 term=underline|else|hi TabLine ctermfg=grey ctermbg=white term=underline|endif
"hi TabLine ctermfg=white ctermbg=white cterm=NONE
hi TabLineFill ctermfg=grey ctermbg=white cterm=NONE
"hi TabLineSel ctermfg=black ctermbg=green cterm=NONE
hi TabLineSel ctermfg=green ctermbg=black term=bold
"hi TabLineSel term=bold cterm=bold
"hi TabLineFill term=reverse cterm=reverse 
"hi TabLine term=underline cterm=underline ctermfg=15 ctermbg=242
&nbsp;
"hi Menu
"hi Scrollbar
"hi Tooltip
&nbsp;
" cursor / dynamic / other {{{2
hi Cursor ctermfg=black ctermbg=white cterm=NONE
hi CursorIM ctermfg=black ctermbg=white cterm=reverse
hi CursorLine ctermfg=NONE ctermbg=NONE cterm=NONE
hi CursorColumn ctermfg=NONE ctermbg=NONE cterm=NONE
&nbsp;
hi Visual ctermfg=white ctermbg=lightblue cterm=NONE
hi IncSearch ctermfg=white ctermbg=yellow cterm=NONE
hi Search ctermfg=white ctermbg=darkgreen cterm=NONE
&nbsp;
" LISTINGS / MESSAGES {{{2
hi ModeMsg ctermfg=yellow ctermbg=NONE cterm=NONE
hi Title ctermfg=red ctermbg=NONE cterm=bold
hi Question ctermfg=green ctermbg=NONE cterm=NONE
hi MoreMsg ctermfg=green ctermbg=NONE cterm=NONE
hi ErrorMsg ctermfg=white ctermbg=red cterm=bold
hi WarningMsg ctermfg=yellow ctermbg=NONE cterm=bold
&nbsp;
hi Directory term=bold ctermfg=4 "{{{
hi ErrorMsg term=standout ctermfg=15 ctermbg=1  
hi IncSearch term=reverse cterm=reverse 
hi Search term=NONE ctermfg=255 ctermbg=135
hi MoreMsg term=bold ctermfg=2  
hi ModeMsg term=bold cterm=bold 
hi LineNr term=underline ctermfg=244 ctermbg=232  
hi Question term=standout ctermfg=2  
hi StatusLine term=bold,reverse cterm=italic ctermfg=253 ctermbg=238   
hi StatusLineNC term=reverse cterm=reverse ctermfg=246 ctermbg=238  
hi VertSplit term=reverse cterm=reverse ctermfg=238 ctermbg=238  
hi Title term=bold cterm=bold ctermfg=254  
hi Visual term=reverse ctermfg=254 ctermbg=4  
hi VisualNOS term=bold,underline cterm=bold,underline
hi WarningMsg term=standout ctermfg=1 
hi WildMenu term=standout ctermfg=0 ctermbg=11  
hi Folded term=standout cterm=BOLD ctermfg=7 ctermbg=27
hi FoldColumn term=NONE cterm=NONE ctermfg=75 ctermbg=16
hi IncSearch term=bold,underline cterm=bold,underline ctermfg=7 ctermbg=9
hi DiffAdd term=bold ctermbg=12 
hi DiffChange term=bold ctermbg=13 
hi DiffDelete term=bold ctermfg=12 ctermbg=14   
hi DiffText term=reverse cterm=bold ctermbg=9  
hi SpellBad term=reverse ctermbg=9  
hi SpellCap term=reverse ctermbg=12  
hi SpellRare term=reverse ctermbg=13  
hi SpellLocal term=underline ctermbg=14  
hi Pmenu ctermfg=255 ctermbg=238  
hi PmenuSel ctermfg=0 ctermbg=148  
hi PmenuSbar ctermbg=7 
hi PmenuThumb cterm=reverse 
hi TabLine term=underline cterm=underline ctermfg=0 ctermbg=7  
hi TabLineSel term=bold cterm=bold 
hi TabLineFill term=reverse cterm=reverse 
hi CursorLine term=underline cterm=bold ctermbg=234
hi Cursor ctermbg=241 
hi MatchParen term=reverse cterm=bold ctermfg=157 ctermbg=237   
hi Error term=reverse ctermfg=15 ctermbg=9  
&nbsp;
" :hi TabLineSel|hi TabLineFill|hi TabLine
"hi TabLineSel term=bold cterm=bold 
"hi TabLineFill term=reverse cterm=reverse 
"hi TabLine term=underline cterm=underline ctermfg=15 ctermbg=242 
hi ExtraWhitespace ctermbg=red
hi Comment term=none ctermfg=darkgrey 
hi Constant term=underline ctermfg=Magenta 
hi Special term=bold ctermfg=DarkMagenta 
hi Identifier term=underline cterm=bold ctermfg=Cyan 
hi Statement term=bold ctermfg=Yellow 
hi PreProc term=underline ctermfg=LightBlue 
hi Type term=underline ctermfg=LightGreen 
hi Repeat term=underline ctermfg=White 
hi Operator ctermfg=Red 
hi Ignore ctermfg=black 
hi Error term=reverse ctermbg=Red ctermfg=White 
hi Todo term=standout ctermbg=Yellow ctermfg=Black 
&nbsp;
" COMMON GROUPS THAT LINK TO DEFAULT HIGHLIGHTING.
&nbsp;
hi Function ctermfg=85
hi String ctermfg=204
hi Statement term=bold cterm=bold ctermfg=81
hi Function term=bold cterm=bold ctermfg=32
hi Number ctermfg=129
hi Conditional term=bold cterm=bold ctermfg=47
hi Special term=underline ctermfg=191
hi Normal ctermfg=7
hi PreProc ctermfg=141
" Syntax highlighting
hi Comment ctermfg=244
hi Todo ctermfg=245
hi Boolean ctermfg=148
hi String ctermfg=148
hi Identifier ctermfg=148
hi Function ctermfg=124
hi Type ctermfg=103
hi Statement ctermfg=103
hi Keyword ctermfg=81
hi Constant ctermfg=81
hi Number ctermfg=81
hi Special ctermfg=81
hi PreProc ctermfg=230
" Code-specific colors
 
&nbsp;
" SYNTAX HIGHLIGHTING GROUPS (:HELP GROUP-NAME) {{{2
hi FoldColumn ctermbg=0 ctermfg=2
hi Folded cterm=none ctermfg=2
hi NonText cterm=NONE ctermfg=NONE 
hi StatusLine ctermfg=black ctermbg=White cterm=bold
hi StatusLineNC ctermfg=White ctermbg=green cterm=NONE
hi CursorLine cterm=bold term=bold
&nbsp;
" FINAL THOUGHTS "{{{2
"syn region myFold start="{" end="}" transparent fold
hi Search term=reverse ctermfg=0 ctermbg=11
hi LineNr term=underline ctermfg=244 ctermbg=232
hi MatchParen ctermfg=15 ctermbg=242
hi String ctermfg=10
hi Constant ctermfg=14
hi Identifier ctermfg=14
hi Operator ctermfg=13
hi NonText cterm=NONE ctermfg=NONE
hi Search cterm=bold ctermbg=99 ctermfg=17
</pre>


<h2>Additional Resources</h2>
<ol>
<li><a href="http://spf13.com/post/perfect-vimrc-vim-config-file">The perfect .vimrc vim config file</a></li>
</ol><p><a href="http://www.askapache.com/linux/fast-vimrc.html"></a><a href="http://www.askapache.com/linux/fast-vimrc.html">Optimized Vimrc with 256 Colorscheme</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/linux/fast-vimrc.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mod_Rewrite Security</title>
		<link>http://www.askapache.com/security/mod_rewrite.html</link>
		<comments>http://www.askapache.com/security/mod_rewrite.html#comments</comments>
		<pubDate>Sat, 18 Feb 2012 06:54:18 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Htaccess]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[RewriteCond]]></category>
		<category><![CDATA[RewriteRule]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=7045</guid>
		<description><![CDATA[<p><a class="hs hs13" href="http://www.askapache.com/security/mod_rewrite.html" title="Mod_Rewrite Artwork"></a>These are a few of the mod_rewrite uses that <a href="http://blogsecurity.net/">BlogSecurity</a> declared <strong>pushed the boundaries of Mod_Rewrite!</strong>  Some of these snippets are quite exotic and unlike anything you may have seen before, also only for those who understand them as they can kill a website pretty quick.<br class="C" /></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/security/mod_rewrite.html"></a><a href="http://www.askapache.com/security/mod_rewrite.html"><cite>AskApache.com</cite></a></p><p>Here are some <a href="http://www.askapache.com/htaccess/htaccess.html" title="Htaccess Tutorial">specific htaccess</a> examples taken mostly from my WordPress Password Protection plugin, which does alot more than password protection as you will see from the following mod_rewrite examples. These are a few of the mod_rewrite uses that <a href="http://blogsecurity.net/">BlogSecurity</a> declared <strong>pushed the boundaries of Mod_Rewrite!</strong>  Some of these snippets are quite exotic and unlike anything you may have seen before, also only for those who understand them as they can kill a website pretty quick.</p>

<h4>Directory Protection</h4>
<p>Enable the DirectoryIndex Protection, preventing directory index listings and defaulting. [<a href="/htaccess/htaccess.html">Disable</a>]</p>
<pre>
Options -Indexes
DirectoryIndex index.html index.php /index.php
</pre>

<h4>Password Protect wp-login.php</h4>
<p>Requires a valid user/pass to access the login page[<a href="/htaccess/apache-status-code-headers-errordocument.html#status-401">401</a>]</p>
<pre>
&lt;Files wp-login.php&gt;
Order Deny,Allow
Deny from All
Satisfy Any
AuthName "Protected By AskApache"
AuthUserFile /home/askapache.com/.htpasswda1
AuthType Basic
Require valid-user
&lt;/Files&gt;
</pre>


<h4>Password Protect wp-admin</h4>
<p>Requires a valid user/pass to access any non-static (css, js, images) file in this directory.[<a href="/htaccess/apache-status-code-headers-errordocument.html#status-401">401</a>]</p>
<pre>
Options -ExecCGI -Indexes +FollowSymLinks -Includes
DirectoryIndex index.php /index.php
Order Deny,Allow
Deny from All
Satisfy Any
AuthName "Protected By AskApache"
AuthUserFile /home/askapache.com/.htpasswda1
AuthType Basic
Require valid-user
&lt;FilesMatch "\.(ico|pdf|flv|jpg|jpeg|mp3|mpg|mp4|mov|wav|wmv|png|gif|swf|css|js)$"&gt;
Allow from All
&lt;/FilesMatch&gt;
&lt;FilesMatch "(async-upload)\.php$"&gt;
&lt;IfModule mod_security.c&gt;
SecFilterEngine Off
&lt;/IfModule&gt;
Allow from All
&lt;/FilesMatch&gt;
</pre>

<h4>Protect wp-content</h4>
<p>Denies any Direct request for files ending in .php with a 403 Forbidden.. May break plugins/themes [<a href="/htaccess/apache-status-code-headers-errordocument.html#status-401">401</a>]</p>
<pre>
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /wp-content/.*$ [NC]
RewriteCond %{REQUEST_FILENAME} !^.+flexible-upload-wp25js.php$
RewriteCond %{REQUEST_FILENAME} ^.+\.(php|html|htm|txt)$
RewriteRule .* - [F,NS,L]
</pre>

<h4>Protect wp-includes</h4>
<p>Denies any Direct request for files ending in .php with a 403 Forbidden.. May break plugins/themes [<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /wp-includes/.*$ [NC]
RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ /wp-includes/js/.+/.+\ HTTP/ [NC]
RewriteCond %{REQUEST_FILENAME} ^.+\.php$
RewriteRule .* - [F,NS,L]
</pre>

<h4>Common Exploits</h4>
<p>Block common exploit requests with 403 Forbidden. These can help alot, may break some plugins. [<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ ///.*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\?\=?(http|ftp|ssl|https):/.*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\?\?.*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.(asp|ini|dll).*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.(htpasswd|htaccess|aahtpasswd).*\ HTTP/ [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>Stop Hotlinking</h4>
<p>Denies any request for static files (images, css, etc) if referrer is not local site or empty. [<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{HTTP_REFERER} !^http://www.askapache.com.*$ [NC]
RewriteRule \.(ico|pdf|flv|jpg|jpeg|mp3|mpg|mp4|mov|wav|wmv|png|gif|swf|css|js)$ - [F,NS,L]
</pre>

<h4>Safe Request Methods</h4>
<p>Denies any request not using <a href="http://www.askapache.com/online-tools/request-method-scanner/">GET,PROPFIND,POST,OPTIONS,PUT,HEAD</a>[<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST|PROPFIND|OPTIONS|PUT)$ [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>Forbid Proxies</h4>
<p>Denies any POST Request using a Proxy Server. Can still access site, but not comment.  See <a href="http://perishablepress.com/press/2008/04/20/how-to-block-proxy-servers-via-htaccess/">Perishable Press</a> [<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP:VIA}%{HTTP:FORWARDED}%{HTTP:USERAGENT_VIA}%{HTTP:X_FORWARDED_FOR}%{HTTP:PROXY_CONNECTION} !^$ [OR]
RewriteCond %{HTTP:XPROXY_CONNECTION}%{HTTP:HTTP_PC_REMOTE_ADDR}%{HTTP:HTTP_CLIENT_IP} !^$
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>Real wp-comments-post.php</h4>
<p>Denies any POST attempt made to a non-existing wp-comments-post.php[<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*/wp-comments-post\.php.*\ HTTP/ [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>HTTP PROTOCOL</h4>
<p>Denies any badly formed HTTP PROTOCOL in the request, 0.9, 1.0, and 1.1 only[<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ .+\ HTTP/(0\.9|1\.0|1\.1) [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>SPECIFY CHARACTERS</h4>
<p>Denies any request for a url containing characters other than "a-zA-Z0-9.+/-?=&amp;"  - REALLY helps but may break your site depending on your links. [<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ [a-zA-Z0-9\.\+_/\-\?\=\&amp;amp;]+\ HTTP/ [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>BAD Content Length</h4>
<p>Denies any POST request that doesnt have a Content-Length Header[<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP:Content-Length} ^$
RewriteCond %{REQUEST_URI} !^/(wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>BAD Content Type</h4>
<p>Denies any POST request with a content type other than application/x-www-form-urlencoded|multipart/form-data[<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP:Content-Type} !^(application/x-www-form-urlencoded|multipart/form-data.*(boundary.*)?)$ [NC]
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>Missing HTTP_HOST</h4>
<p>Denies requests that dont contain a HTTP HOST Header.[<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{HTTP_HOST} ^$
RewriteRule .* - [F,NS,L]
</pre>

<h4>Bogus Graphics Exploit</h4>
<p>Denies obvious exploit using bogus graphics[<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{HTTP:Content-Disposition} \.php [NC]
RewriteCond %{HTTP:Content-Type} image/.+ [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>No UserAgent, Not POST</h4>
<p>Denies POST requests by blank user-agents.  May prevent a small number of visitors from POSTING. [<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP_USER_AGENT} ^-?$
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>No Referer, No Comment</h4>
<p>Denies any comment attempt with a blank HTTP_REFERER field, highly indicative of spam.  May prevent some visitors from POSTING. [<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*/wp-comments-post\.php.*\ HTTP/ [NC]
RewriteCond %{HTTP_REFERER} ^-?$
RewriteRule .* - [F,NS,L]
</pre>

<h4>Trackback Spam</h4>
<p>Denies obvious trackback spam.  See Holy Shmoly! [<a href="/htaccess/apache-status-code-headers-errordocument.html#status-403">403</a>]</p>
<pre>
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP_USER_AGENT} ^.*(opera|mozilla|firefox|msie|safari).*$ [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.+/trackback/?\ HTTP/ [NC]
RewriteRule .* - [F,NS,L]
</pre>

<h4>Map all URIs except those corresponding to existing files to a handler</h4>
<pre>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule . /script.php
</pre>

<h4>Map any request to a handler</h4>
<p>In the case where all URIs should be sent to the same place (including potentially requests for static content) the method to use depends on the type of the handler. For php scripts, use:
For other handlers such as php scripts, use:</p>
<pre>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/script.php
RewriteRule .* /script.php
</pre>

<h4>And for CGI scripts:</h4>
<pre>
ScriptAliasMatch .* /var/www/script.cgi
</pre>

<h4>Map URIs corresponding to existing files to a handler instead</h4>
<pre>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f
RewriteCond %{REQUEST_URI} !=/script.php
RewriteRule .* /script.php
</pre>
<p>If the existing files you wish to have handled by your script have a common set of file extensions distinct from that of the hander, you can bypass mod_rewrite and use instead mod_actions. Let's say you want all .html and .tpl files to be dealt with by your script:</p>
<pre>
Action foo-action /script.php
AddHandler foo-action html tpl
</pre>

<h4>Deny access if var=val contains the string foo.</h4>
<pre>
RewriteCond %{QUERY_STRING} foo
RewriteRule ^/url - [F]
</pre>

<h4>Removing the Query String</h4>
<pre>
RewriteRule ^/url /url?
</pre>

<h4>Adding to the Query String</h4>
<p>Keep the existing query string using the Query String Append flag, but add var=val to the end.</p>
<pre>
RewriteRule ^/url /url?var=val [QSA]
</pre>

<h4>Rewriting For Certain Query Strings</h4>
<p>Rewrite URLs like http://askapache.com/url1?var=val to http://askapache.com/url2?var=val but don't rewrite if val isn't present.</p>
<pre>
RewriteCond %{QUERY_STRING} val
RewriteRule ^/url1 /url2
</pre>

<h4>Modifying the Query String</h4>
<p>Change any single instance of val in the query string to other_val when accessing /path. Note that %1 and %2 are back-references to the matched part of the regular expression in the previous RewriteCond.</p>
<pre>
RewriteCond %{QUERY_STRING} ^(.*)val(.*)$
RewriteRule /path /path?%1other_val%2
</pre>
<hr class="C" />
<p><a href="http://www.askapache.com/security/mod_rewrite.html"></a><a href="http://www.askapache.com/security/mod_rewrite.html">Mod_Rewrite Security</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/security/mod_rewrite.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Programming Fonts for the Web</title>
		<link>http://www.askapache.com/css/programming-fonts-code.html</link>
		<comments>http://www.askapache.com/css/programming-fonts-code.html#comments</comments>
		<pubDate>Sat, 29 Oct 2011 09:37:43 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=4809</guid>
		<description><![CDATA[<p>The idea is to use CSS to have the browser display programming and code similar to the high-quality look of a developers machine, like this older screenshot of my VIM.</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/css/programming-fonts-code.html"></a><a href="http://www.askapache.com/css/programming-fonts-code.html"><cite>AskApache.com</cite></a></p><p>The idea is to have the browser display programming and code similar to the high-quality found on a developers machine, like this older screenshot of my vim. <br /><a href="http://www.askapache.com/linux/bash-power-prompt.html/bash-prompt-screenshot/" rel="attachment wp-att-4177"><img src="http://uploads.askapache.com/2010/03/bash-prompt-screenshot.png" alt="Custom Power Prompt" title="Custom Power Prompt" width="795" height="596" /></a></p>
<p>The most important step is to figure out the font-family and the basic font-attributes.  You want to show the best font for those visitors (like me) who have all these extra console fonts, but fallback to a font that anyone in the world can view.</p>

<h2>Monospace is the fallback</h2>
<blockquote cite="http://www.w3.org/TR/CSS2/fonts.html">
<h4><a href="http://www.w3.org/TR/CSS2/fonts.html">15.3.1.5 <dfn>monospace</dfn></a></h4>
<p><p>The sole criterion of a monospace font is that all glyphs have the same fixed width. (This can make some scripts, such as Arabic, look most peculiar.) The effect is similar to a manual typewriter, and is often used to set samples of computer code.</p>
</blockquote>



<h2>CSS Rules for Code</h2>
<p>Here are a few css rules I use.  That is my ultimate font-family heirarchy of console-type fonts, though not many people have them installed.  The fallback is usually Andale Mono, Monaco, or DejaVu Sans Mono, Lucida Console, Bitstream, then Courier.</p>
<pre>kbd, samp, tt, pre, code, var,
.code, .pre {
   font-family: Terminus,Consolas,Profont,"Andale Mono",Monaco,Inconsolata,Inconsolata-g,
      Unifont,Lime,"ClearlyU PUA",Clean,"DejaVu Sans Mono","Lucida Console",
      "Bitstream Vera Sans Mono",Freemono,"Liberation Mono",Dina,Anka,Droid Sans Mono,
      Anonymous Pro,Proggy fonts,Envy Code R,Gamow,Courier,"Courier New",Terminal,monospace;
}</pre>

<p>This is just some basic pre attributes, useful as a reset or to force the issue.  You may just want to do <code>.pre {...}</code> to apply to elements with <code>class="pre"</code> instead of applying to all pre elements sitewide.</p>
<pre>pre { letter-spacing:normal; word-spacing:normal; text-transform:none; max-width:100%; overflow:auto; white-space:pre-wrap; }
pre.normal { white-space:normal }</pre>


<h2>Live Font Examples</h2>
<p>What you see is what you get, so experiment with different browsers.</p>
<ul>
<li><a id="font-Courier" name="font-Courier">Courier</a><br />
<pre style='font-family:Courier,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Courier-New" name="font-Courier-New">Courier New</a><br />
<pre style='font-family:Courier New,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Terminal" name="font-Terminal">Terminal</a><br />
<pre style='font-family:Terminal,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Agency-FB-Bold" name="Agency-FB-Bold">Agency FB Bold</a><br />
<pre style='font-family:Agency FB Bold,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Consolas" name="font-Consolas">Consolas</a><br />
<pre style='font-family:Consolas,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Terminus" name="font-Terminus">Terminus</a><br />
<pre style='font-family:Terminus,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Profont" name="font-Profont">Profont</a><br />
<pre style='font-family:Profont,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Andale-Mono" name="font-Andale-Mono">Andale Mono</a><br />
<pre style='font-family:Andale Mono,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Monaco" name="font-Monaco">Monaco</a><br />
<pre style='font-family:Monaco,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Inconsolata" name="font-Inconsolata">Inconsolata</a><br />
<pre style='font-family:Inconsolata,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Inconsolata-g" name="font-Inconsolata-g">Inconsolata-g</a><br />
<pre style='font-family:Inconsolata-g,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Unifont" name="font-Unifont">Unifont</a><br />
<pre style='font-family:Unifont,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Lime" name="font-Lime">Lime</a><br />
<pre style='font-family:Lime,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-ClearlyU-PUA" name="font-ClearlyU-PUA">ClearlyU PUA</a><br />
<pre style='font-family:ClearlyU PUA,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Clean" name="font-Clean">Clean</a><br />
<pre style='font-family:Clean,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-DejaVu-Sans-Mono" name="font-DejaVu-Sans-Mono">DejaVu Sans Mono</a><br />
<pre style='font-family:DejaVu Sans Mono,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Lucida-Console" name="font-Lucida-Console">Lucida Console</a><br />
<pre style='font-family:Lucida Console,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Bitstream-Vera-Sans-Mono" name="font-Bitstream-Vera-Sans-Mono">Bitstream Vera Sans Mono</a><br />
<pre style='font-family:Bitstream Vera Sans Mono,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Freemono" name="font-Freemono">Freemono</a><br />

<pre style='font-family:Freemono,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Liberation-Mono" name="font-Liberation-Mono">Liberation Mono</a><br />
<pre style='font-family:Liberation Mono,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Dina" name="font-Dina">Dina</a><br />
<pre style='font-family:Dina,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Anka" name="font-Anka">Anka</a><br />
<pre style='font-family:Anka,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Droid-Sans-Mono" name="font-Droid-Sans-Mono">Droid Sans Mono</a><br />
<pre style='font-family:Droid Sans Mono,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Anonymous-Pro" name="font-Anonymous-Pro">Anonymous Pro</a><br />
<pre style='font-family:Anonymous Pro,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Proggy-fonts" name="font-Proggy-fonts">Proggy fonts</a><br />
<pre style='font-family:Proggy fonts,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Envy-Code-R" name="font-Envy-Code-R">Envy-Code-R</a><br />
<pre style='font-family:Envy Code R,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
<li><a id="font-Gamow" name="font-Gamow">Gamow</a><br />
<pre style='font-family:Gamow,Open Symbol,Webdings,Wingdings,SWMacro,Haettenschweiler,Wide Latin,Marlett,Parchment,fantasy'>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
|     Type      |      Code     |          A B C D E F G H      |</pre></li>
</ul>



<h2>More Info and Software</h2>
<ul>
<li><a href="http://www.w3.org/Style/Examples/007/fonts#font-family">CSS Font Families Example at W3</a></li>
<li><a href="http://www.lowing.org/fonts/">Monospace/Fixed Width Programmer's Fonts</a></li>
<li><a href="http://www.nirsoft.net/utils/windows_fonts_viewer.html">WinFontsView v1.10 - View samples of Windows fonts installed on your system </a></li>
</ul>



<p><a class="hs hs13" href="http://www.askapache.com/servers/mod_rewrite.c.html"></a></p><p><a href="http://www.askapache.com/css/programming-fonts-code.html"></a><a href="http://www.askapache.com/css/programming-fonts-code.html">Programming Fonts for the Web</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/css/programming-fonts-code.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Add CSS Class to body when Sidebar is Present</title>
		<link>http://www.askapache.com/wordpress/add-css-class-to-body-sidebar.html</link>
		<comments>http://www.askapache.com/wordpress/add-css-class-to-body-sidebar.html#comments</comments>
		<pubDate>Fri, 07 Oct 2011 11:39:23 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=5128</guid>
		<description><![CDATA[<p>Here's the problem I was having while working on a custom theme for a client.  Certain pages, posts, tag pages, archive pages, and custom pages either had the sidebar, or did not have the sidebar.  The main content div <code>#ContentW</code> had a 72% width when the sidebar was present, otherwise it was 96%.  The problem was that I dislike having to do things manually when they can be automated through code.  What I was having to do was manually add/remove page-specific classes to the css file to reflect whether the sidebar was present on that page or not.</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/wordpress/add-css-class-to-body-sidebar.html"></a><a href="http://www.askapache.com/wordpress/add-css-class-to-body-sidebar.html"><cite>AskApache.com</cite></a></p><p>Here's the problem I was having while working on a custom theme for a client.  Certain pages, posts, tag pages, archive pages, and custom pages either had the sidebar, or did not have the sidebar.  The main content div <code>#ContentW</code> had a 72% width when the sidebar was present, otherwise it was 96%.  The problem was that I dislike having to do things manually when they can be automated through code.  What I was having to do was manually add/remove page-specific classes to the css file to reflect whether the sidebar was present on that page or not.</p>

<h2>body_class()</h2>
<p>WordPress uses a function called <a href="http://codex.wordpress.org/Function_Reference/body_class">body_class()</a> to output page-specific classnames for the <code>&lt;body class=""&gt;</code> tag. So for instance on a single post, body_class includes the class "single" along with others like "post-147" or "page-123" or "category-34" depending on what page it is.</p>
<p>So back to my width problem:  I was having to create css rules for each specific type of page to be applied to the ContentW div to make it either wide (no sidebar) or not.. The following css is for pages that have the sidebar, thus making the <code>#ContentW</code> div only 72% wide.  These include the homepage, single post pages, and a page with the id of 345.</p>
<pre>.home #ContentW,
.single #ContentW,
.page-345 #ContentW { width:72%; }</pre>

<p>What I really would like to do would be to just add a class to body named "withsidebar" that is automatically added to the body class when sidebar.php is included, and is automatically not added when <code>sidebar.php</code> is not included.  Then my css would be so simple:</p>
<pre>#ContentW { float:left; overflow:hidden; width:96%; }
.withsidebar #ContentW { width:72%; }</pre>
<p>Meaning I'm free to include or not include the sidebar on any page or post on the site and the #ContentW width will always be right.</p>


<h2>In the header</h2>
<p>The problem, is that <code>body_class()</code> is executed in the themes header.php file by the <a href="http://codex.wordpress.org/Function_Reference/get_header">get_header()</a> function, which is always called before calling <a href="http://codex.wordpress.org/Function_Reference/get_sidebar">get_sidebar()</a> to include <code>sidebar.php</code>, SO I wasn't able to change the output of <code>body_class()</code> to reflect whether or not <code>sidebar.php</code> had been included or not.  By the time <code>sidebar.php</code> was included, body_class had already been output.</p>

<h2>The Solution for adding a sidebar class</h2>
<p>The solution I came up with is very nice and foolproof, and is only 2 lines of code.  Simply does a basic "search and replace" on the output of get_header, where body_class is executed to replace or remove my own class to the body tag when the sidebar is included.</p>
<pre>&lt;?php
add_action(&#039;wp_head&#039;,create_function("",&#039;ob_start();&#039;));
add_action( &#039;get_sidebar&#039;, create_function(&#039;&#039;,&#039;echo str_replace("&lt;body class=\"","&lt;body class=\"withsidebar ",ob_get_clean());ob_start();&#039;) );
?&gt;</pre>

<h3>Start output buffer in header</h3>
<p>First I started an output buffer with <a href="http://php.net/manual/en/function.ob-start.php">ob_start()</a> (to save the output of get_header) by hooking into the wp_head action which is where body_class is executed.</p>
<pre>add_action(&#039;wp_head&#039;,create_function("",&#039;ob_start();&#039;));</pre>

<p>I prefer to use create_function when possible, but the above is exactly the same as:</p>
<pre>add_action(&#039;wp_head&#039;,&#039;start_sidebar_class_fix_output&#039;);
function start_sidebar_class_fix_output()
{
  ob_start();
}</pre>


<h3>Search and Replace Function in sidebar.php</h3>
<p>Now that the output from wp_header containing the body class is accessible in an output buffer, we need to be able to execute the search and replace ONLY when the sidebar.php file is included.  To do this, I hooked into the get_sidebar action that is called by get_sidebar().  This function created by create_function replaces <code>&lt;body class="</code> with <code>&lt;body class="withsidebar </code> in the $buffer and echos it.  If the search string isn't found it echos the $buffer intact.</p>
<pre>add_action( &#039;get_sidebar&#039;, create_function(&#039;&#039;,&#039;echo str_replace("&lt;body class=\"","&lt;body class=\"withsidebar ",ob_get_clean());ob_start();&#039;) );</pre>
<p>This function simply adds "withsidebar" to the body class by search and replace on the output buffer.  The output buffer passed to the str_replace function by using <a href="http://php.net/manual/en/function.ob-get-clean.php">ob_get_clean()</a> which returns the buffer.  Finally, ob_start is called again to resume output buffering (it will automatically be flushed at EOF), just because I like doing things that way, it's not neccessary to restart the output buffer with ob_start however.</p>




<h2>Enhanced for Multiple Sidebars</h2>
<p>Now then, say you have multiple sidebars like <code>sidebar-left.php</code> and <code>sidebar-right.php</code>, and you want a class added to the body class for every single sidebar that is used?  Or let's decide we want this sidebar class adding-feature as robust and future-proofed as needed (in case you use multiple sidebars or your theme does in the future).</p>
<p>Instead of the code above, use this.  Just paste it into your themes <code>functions.php</code> file or add it to a plugin (paste this in the file <code>/wp-content/plugins/sidebar_class_replace.php</code> and you have yourself a plugin).</p>

<p>This enhanced version still adds the class "withsidebar" to the body class the first time any sidebar is included.  Every additionaly sidebar that is included has a class appended to the body class as well.  Finally, in the wp_footer the search and replace takes place, 1 time no matter how many sidebars.  It even works if you nest get_sidebar calls within other sidebars.</p>
<pre>&lt;?php
&nbsp;
add_action(&#039;wp_head&#039;, create_function("",&#039;ob_start();&#039;) );
add_action(&#039;get_sidebar&#039;, &#039;my_sidebar_class&#039;);
add_action(&#039;wp_footer&#039;, &#039;my_sidebar_class_replace&#039;);
&nbsp;
function my_sidebar_class($name=&#039;&#039;){
  static $class="withsidebar";
  if(!empty($name))$class.=" sidebar-{$name}";
  my_sidebar_class_replace($class);
}
&nbsp;
function my_sidebar_class_replace($c=&#039;&#039;){
  static $class=&#039;&#039;;
  if(!empty($c)) $class=$c;
  else {
    echo str_replace(&#039;&lt;body class="&#039;,&#039;&lt;body class="&#039;.$class.&#039; &#039;,ob_get_clean());
    ob_start();
  }
}
?&gt;</pre>

<h3>Example sidebar.php with multiple sidebars</h3>
<p>Here is an example of a sidebar.php with multiple sidebars.  This would result in the body class having "withsidebar sidebar-top sidebar-special sidebar-bottom" added to it.</p>
<pre>&lt;?php
&nbsp;
&lt;div id="sidebar"&gt;
&nbsp;
&lt;?php get_sidebar( &#039;top&#039; );?&gt;
&lt;?php get_sidebar( &#039;special&#039; );?&gt;
&lt;?php get_sidebar( &#039;bottom&#039; );?&gt;
&nbsp;
&lt;/div&gt;
?&gt;</pre>




<h2>Notes and Thoughts</h2>
<p>I use the development version of WordPress, so this will work on any version of wordpress 1.5.0 to beta, and will definately work for the next 100 versions of wordpress.</p>
<p>I love using <a href="http://php.net/manual/en/function.create-function.php" title="create_function php reference">create_function</a> like this, really as much as I can as it produces more optimized code and optimized execution environments, though it is more confusing to read, especially if you are unfamiliar with it.  I also really find the static variable useful.  Last thought, I really love wordpress's actions and filters and the hooking ability.  Way cool!</p>
<p>Using this basic idea, you are unlimited by what you want to do with your site.  You now know how to change and modify the output produced by wordpress after it is produced, but before it is shown to the browser, the possibilities are exciting.</p><p><a href="http://www.askapache.com/wordpress/add-css-class-to-body-sidebar.html"></a><a href="http://www.askapache.com/wordpress/add-css-class-to-body-sidebar.html">Add CSS Class to body when Sidebar is Present</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/wordpress/add-css-class-to-body-sidebar.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript Snippet to Add HTML, CSS, and FEED Validation Links</title>
		<link>http://www.askapache.com/javascript/javascript-html-css-feed-validation.html</link>
		<comments>http://www.askapache.com/javascript/javascript-html-css-feed-validation.html#comments</comments>
		<pubDate>Fri, 01 Jul 2011 22:04:31 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.askapache.com/?p=4066</guid>
		<description><![CDATA[<p><a class="IFL" href="http://uploads.askapache.com/2011/07/javascript-validation.png"><img src="http://uploads.askapache.com/2011/07/javascript-validation.png" alt="Javascript Techniques to add HTML, CSS, FEED, validation" title="javascript-html-rss-css-validation" width="195" height="243" /></a><br /><br />Here's an example of validation links from the AskApache footer.<br /><br /><a href="http://feedvalidator.org/check.cgi?url=http://www.askapache.com/feed/">RSS</a>  &#124; <a href="http://validator.w3.org/check/referer?ss=1;outline=1;sp=1;debug">XHTML 1.1</a> &#124; <a href="http://jigsaw.w3.org/css-validator/check/referer?warning=0">CSS 2.1</a><br /><br /><pre>document.getElementById("validat").innerHTML += &#039; &#124; &#60;a href="http://feedvalidator.org/check.cgi?url=http://www.askapache.com/feed/"&#62;RSS&#60;/a&#62;  &#124; &#60;a href="http://validator.w3.org/check/referer?ss=1;outline=1;sp=1;debug"&#62;XHTML 1.1&#60;/a&#62; &#124; &#60;a href="http://jigsaw.w3.org/css-validator/check/referer?warning=0"&#62;CSS 2.1&#60;/a&#62;&#039;;</pre><br class="C" /></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/javascript/javascript-html-css-feed-validation.html"></a><a href="http://www.askapache.com/javascript/javascript-html-css-feed-validation.html"><cite>AskApache.com</cite></a></p><p><a class="IFL" href="http://uploads.askapache.com/2011/07/javascript-validation11.png"><img src="http://uploads.askapache.com/2011/07/javascript-validation11.png" alt="Javascript Techniques to add HTML, CSS, FEED, validation" title="javascript-html-rss-css-validation" width="195" height="243" /></a><br /><br />Here's an example of validation links from the AskApache footer.<br /><br /><a href="http://feedvalidator.org/check.cgi?url=http://www.askapache.com/feed/">RSS</a>  | <a href="http://validator.w3.org/check/referer?ss=1;outline=1;sp=1;debug">XHTML 1.1</a> | <a href="http://jigsaw.w3.org/css-validator/check/referer?warning=0">CSS 2.1</a><br /><br /><pre>document.getElementById("validat").innerHTML += &#039; | &lt;a href="http://feedvalidator.org/check.cgi?url=http://www.askapache.com/feed/"&gt;RSS&lt;/a&gt;  | &lt;a href="http://validator.w3.org/check/referer?ss=1;outline=1;sp=1;debug"&gt;XHTML 1.1&lt;/a&gt; | &lt;a href="http://jigsaw.w3.org/css-validator/check/referer?warning=0"&gt;CSS 2.1&lt;/a&gt;&#039;;</pre><br class="C" /></p>





<h2>Main Javascript Object</h2>
<p>Now here's the object that contains all the functions and variables.  This is smart to do as a function (all javascript really) because it makes it much safer as it won't conflict with other scripts or having naming collisions.  And portable code is always something to strive for.</p>
<pre>var AskApacheJS = new Object({
&nbsp;
  /* Runs on page load.  Initializes ajs as being an alias for AskApacheJS,
  * and runs the append_validation_links function after 5 seconds. */
  _init: function () {
    /*console.log(&#039;Running _init&#039;);*/
    window.ajs = this;
    setTimeout(ajs.append_validation_links, 5000);
  },
&nbsp;
  append_validation_links: function () {
    var ac=ajs.gi(&#039;validatelinks&#039;);
&nbsp;
    if(ac) {
      var url=encodeURI(window.location).toString().replace(/&amp;/g,"&amp;amp;");
&nbsp;
      ac.innerHTML =
        "&lt;a href=\"http://jigsaw.w3.org/css-validator/check/referer?warning=0&amp;amp;profile=css21&amp;amp;warning=1\"&gt;&lt;/a&gt; | "
      + "&lt;a href=\"http://validator.w3.org/feed/check.cgi?url="+url+"\"&gt;&lt;/a&gt; | "
      + "&lt;a href=\"http://validator.w3.org/check/referer?ss=1;outline=1;sp=1;debug\"&gt;&lt;/a&gt; | "
      + "&lt;a href=\"http://validator.w3.org/checklink?check=Check&amp;amp;hide_type=all&amp;amp;summary=on&amp;amp;uri="+url+"\"&gt;&lt;/a&gt; | "
      + "&lt;a href=\"http://www.cynthiasays.com/mynewtester/cynthia.exe?rptmode=-1&amp;amp;url1="+url+"\"&gt;&lt;/a&gt; | "
      + "&lt;a href=\"http://www.cynthiasays.com/mynewtester/cynthia.exe?rptmode=2&amp;amp;url1="+url+"\"&gt;&lt;/a&gt;";
    }
  },
&nbsp;
  /* gi stands for get item, and returns an element by id. Very robust: if it cant find the object it logs to the console. */
  gi: function (B) {
    /*console.log(&#039;Running gi &#039;+B);*/
    try {var b = document.getElementById(B);}
    catch(e1) {b = null;try {b = document.all(B);}
    catch(e2) {b = null;try {b = document.layers[B];}
    catch(e3) {b = null;}}}
    return (ajs.isobj(b)) ? b : ajs.er("ERR gi " + B);
  },
&nbsp;
  /* This function writes the passed msg to the console as type &#039;error&#039;
  *  and then returns false since it was afterall an error. */
  er: function (msg) { console.error(msg); return false; },
&nbsp;
  /* Returns true or false based on whether the passed item was an object, used by gi. */
  isobj: function (_1e) { return (typeof _1e != "undefined" &amp;&amp; typeof _1e === "object") ? true : false;  }
});</pre>


<h3>Initialize the Object</h3>
<pre>;(function () {
  if (!window.ajs)var ajs=AskApacheJS;window.ajs=ajs=AskApacheJS;
  try{ajs._init();}catch(e){AskApacheJS._init();}
})();</pre>




<h2>FireBug Logging</h2>
<p>First things first, this sets up all the logging and debugging needed.  This lets you control debugging output displayed in the console used by debuggers like FireBug.  Add this to the very top of your javascript.</p>
<pre>if(!this["console"]){this.console = {};}
var i=0,tn,cn=["assert","count","debug","dir","dirxml","error","group","groupEnd","info",
"profile","profileEnd","time","timeEnd","trace","warn","log"];
while ((tn = cn[i++])) {
  if (!console[tn]) {
    (function () { var a = tn + "", console[a] = ("log" in console) ?
    function(){var a=tn+"";console[a]=("log" in console) ?
    function(){var b=Array.apply({},arguments);b.unshift(a+":");
    console["log"](b.join(" "))} : function(){}})()
  }
};</pre>



<h3>Turning On/Off Debugging</h3>
<p>It's useful to quickly be able to switch between having the console logging turned on or off.  The downside to keeping it on of course is overhead.  Here's a very simple method that I use, advanced users use more sophisticated methods than this. Here are the regexes (Adobe CS4 DreamWeaver).</p>
<pre># To turn console logging on
Search for: /\*console.log([^;]*);\*/
Replace with: console.log$1;
&nbsp;
# To turn console logging off
console.log([^;]*);
/*console.log$1;*/</pre>


<h3>Console Logging Commented Out</h3>
<p>Here's an example of howto log the isobj function from the above object.</
<pre>  isobj: function (_1e) {
    /*@console@*console.log(&#039;Running isobj &#039;);**@console@*/
    return (typeof _1e != ajs.undefined &amp;&amp; typeof _1e === "object") ? true : false;
  },</pre>






<h2>Quick and Easy Example</h2>
<pre>  document.getElementById(&#039;validatelinks&#039;) &amp;&amp; document.getElementById(&#039;validatelinks&#039;).innerHTML =
        "&lt;a href=\"http://jigsaw.w3.org/css-validator/check/referer?warning=0&amp;amp;profile=css21&amp;amp;warning=1\"&gt;&lt;/a&gt; | "
      + "&lt;a href=\"http://validator.w3.org/feed/check.cgi?url="+url+"\"&gt;&lt;/a&gt; | "
      + "&lt;a href=\"http://validator.w3.org/check/referer?ss=1;outline=1;sp=1;debug\"&gt;&lt;/a&gt; | "
      + "&lt;a href=\"http://validator.w3.org/checklink?check=Check&amp;amp;hide_type=all&amp;amp;summary=on&amp;amp;uri="+url+"\"&gt;&lt;/a&gt; | "
      + "&lt;a href=\"http://www.cynthiasays.com/mynewtester/cynthia.exe?rptmode=-1&amp;amp;url1="+url+"\"&gt;&lt;/a&gt; | "
      + "&lt;a href=\"http://www.cynthiasays.com/mynewtester/cynthia.exe?rptmode=2&amp;amp;url1="+url+"\"&gt;&lt;/a&gt;";</pre><p><a href="http://www.askapache.com/javascript/javascript-html-css-feed-validation.html"></a><a href="http://www.askapache.com/javascript/javascript-html-css-feed-validation.html">Javascript Snippet to Add HTML, CSS, and FEED Validation Links</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/javascript/javascript-html-css-feed-validation.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Htaccess Rewrites &#8211; Rewrite Tricks and Tips</title>
		<link>http://www.askapache.com/htaccess/modrewrite-tips-tricks.html</link>
		<comments>http://www.askapache.com/htaccess/modrewrite-tips-tricks.html#comments</comments>
		<pubDate>Sun, 10 Apr 2011 14:05:00 +0000</pubDate>
		<dc:creator>AskApache</dc:creator>
				<category><![CDATA[Htaccess]]></category>

		<guid isPermaLink="false">http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html</guid>
		<description><![CDATA[<p><strong>htaccess rewrite</strong> / Mod_Rewrite Tips and Tricks is as glamorous as it sounds!  htaccess rewrite mod_rewrite is just possibly one of the most useful Apache modules and features.  The ability to rewrite requests internally as well as externally is extremely powerful.</p>
<p><a class="hs hs13" href="http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html"></a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.askapache.com/htaccess/modrewrite-tips-tricks.html"></a><a href="http://www.askapache.com/htaccess/modrewrite-tips-tricks.html"><cite>AskApache.com</cite></a></p><p><strong>Htaccess Rewrites</strong> are enabled by using the Apache module <a href="http://www.askapache.com/servers/mod_rewrite.c.html">mod_rewrite</a>, which is one of the most powerful Apache modules and features availale.  Htaccess Rewrites through mod_rewrite provide the special ability to <strong>Rewrite requests internally</strong> as well as <em>Redirect request externally</em>.<br class="C" /></p>
<p><a class="hs hs13" href="http://www.askapache.com/servers/mod_rewrite.c.html"></a></p>

<p>When the url in your browser's location bar stays the same for a request it is an internal rewrite, when the url changes an external redirection is taking place.  This is one of the first, and one of the biggest mental-blocks people have when learning about mod_rewrite...  But I have a secret weapon for you to use, a new discovery from years of research that makes learning mod_rewrite drastically quicker and easier.  It truly does or I wouldn't be saying so in the introduction of this article.</p>

<blockquote><p>Despite the tons of examples and docs, <strong>mod_rewrite is voodoo</strong>.
Damned cool voodoo, but still voodoo.<br />-- <cite>Brian Moore</cite></p></blockquote>

<p class="anote"><strong>Note:</strong>  After years of fighting to learn my way through rewriting urls with mod_rewrite, I finally had a breakthrough and found a way to outsmart the difficulty of mod_rewrite that I just couldn't seem to master.  The <a href="http://www.askapache.com/htaccess/mod_rewrite-variables-cheatsheet.html">Mod_Rewrite RewriteCond/RewriteRule Variable Value Cheatsheet</a> is the one-of-a-kind tool that changed the game for me and made mod_rewriting no-harder than anything else.</p>

<p>So keep that mod_rewrite reference bookmarked and you will be able to figure out any RewriteRule or RewriteCond, an amazing feat considering it took me a LONG time to figure this stuff out on my own.  But that was before <a href="http://www.askapache.com/htaccess/crazy-advanced-mod_rewrite-tutorial.html">the craziness</a>, one of the most challenging and productive .htaccess experiments I've done... An experiment so <strong>ILL</strong> it's sick like a diamond disease on your wrist! $$$.  That mod_rewrite experiment/tutorial was the culmination of many different advanced mod_rewrite experiments I had done in the past and included most of my very best .htaccess tricks.  With the cheatsheet it's no longer Voodoo.. Its just what you do.  Now lets dig in!</p>


<!--
<h2>Htaccess rewrites TOC</h2>
        <ul>
            <li><a href="#default-mod-rewrite-hint" title=".htaccess mod rewrite should use Options +FollowSymLinks">.htaccess rewrite examples should begin with:</a></li>
            <li><a href="#require-the-www-in-htaccess" title="Use mod_rewrite in Apache htaccess to Require the www for SEO">Require the www</a></li>
            <li><a href="#require-no-www-in-htaccess" title="Use mod_rewrite in Apache htaccess to Require no www for SEO">Require no www</a></li>
            <li><a href="#check-for-key-in-query-string" title="Search for a key in the query string">Check for a key in QUERY_STRING</a></li>
            <li><a href="#delete-query-string" title="Remove the query string from url">Removes the QUERY_STRING from the URL</a></li>
            <li><a href="#fix-infinite-loop-redirects" title="Stop internal redirect looping">Fix for infinite loops</a></li>
            <li><a href="#external-redirect-php-files-to-html" title="Redirecting .php file extensions to .html">Redirect .php files to .html files (SEO friendly)</a></li>
            <li><a href="#internal-redirect-php-files-to-html" title="Redirecting .html file extensions to .php">Redirect .html files to actual .php files (SEO friendly)</a></li>
            <li><a href="#time-based-access" title="Deny access with Apache htaccess during certain hours of the day">block access to files during certain hours of the day</a></li>
            <li><a href="#convert-underscore-hyphen" title="Change underscores to hyphens for SEO URL">Rewrite underscores to hyphens for SEO URL</a></li>
            <li><a href="#require-www-no-hardcoding" title="mod_rewrite example of SEO 301 redirecting non-www to www">Require the www without hardcoding</a></li>
            <li><a href="#require-no-subdomain-1" title="mod_rewrite subdomain usage example of SEO 301 redirecting">Require no subdomain</a></li>
            <li><a href="#require-no-subdomain-2" title="Apache htaccess htaccess rewrite ~without slash">Require no subdomain</a></li>
            <li><a href="#redirect-wordpress-feed" title="Rewriting WordPress RSS feeds to Feedburner in SEO friendly method">Redirecting WordPress Feeds to Feedburner</a></li>
            <li><a href="#only-allow-get-and-put-requests" title="Deny Request Methods other than GET or PUT">Only allow GET and PUT request methods</a></li>
            <li><a href="#prevent-hotlinking" title="hotlinking and bandwidth stealing with mod_rewrite, hotlinking example">Prevent Files image/file hotlinking and bandwidth stealing</a></li>
            <li><a href="#stop-browser-prefetching" title="Fix prefetching in browsers">Stop browser prefetching</a></li>
        </ul>

<hr />
-->
<p>If you really want to take a look, check out the <a href="http://www.askapache.com/servers/mod_rewrite.c.html">mod_rewrite.c</a> and <a href="http://www.askapache.com/servers/mod_rewrite.h.html">mod_rewrite.h</a> files.</p>

<p>Be aware that mod_rewrite (<em>RewriteRule, RewriteBase, and RewriteCond</em>) code is executed for each and every HTTP request that accesses a file in or below the directory where the code resides, so it's always good to limit the code to certain circumstances if readily identifiable.</p>
<p><strong>For example</strong>, to limit the next 5 RewriteRules to only be applied to .html and .php files, you can use the following code, which tests if the url does not end in .html or .php and if it doesn't, it will skip the next 5 RewriteRules.</p><hr />
<pre>
RewriteRule !\.(html|php)$ - [S=5]
RewriteRule ^.*-(vf12|vf13|vf5|vf35|vf1|vf10|vf33|vf8).+$ - [S=1]
</pre>

<h2><a href="#default-mod-rewrite-hint" name="default-mod-rewrite-hint" id="default-mod-rewrite-hint" title="Mostly .htaccess rewrite examples should begin with:" class="acd">.htaccess rewrite examples should begin with:</a></h2>
<pre>
Options +FollowSymLinks
&nbsp;
RewriteEngine On
RewriteBase /
</pre>


<h2><a href="#require-the-www-in-htaccess" name="require-the-www-in-htaccess" id="require-the-www-in-htaccess" title="Require the www" class="acd">Require the www</a></h2>
<pre>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.askapache\.com$ [NC]
RewriteRule ^(.*)$ http://www.askapache.com/$1 [R=301,L]
</pre>


<h2>Loop Stopping Code</h2>
<p>Sometimes your rewrites cause infinite loops, stop it with one of these rewrite code snippets.</p>
<pre>
RewriteCond %{REQUEST_URI} ^/(stats/|missing\.html|failed_auth\.html|error/).* [NC]
RewriteRule .* - [L]
&nbsp;
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
</pre>

<h2>Cache-Friendly File Names</h2>
<p>This is probably my favorite, and I use it on every site I work on.  It allows me to update my javascript and css files in my visitors cache's simply by naming them differently in the html, on the server they stay the same name.  This rewrites all files for <code>/zap/j/anything-anynumber.js to /zap/j/anything.js and /zap/c/anything-anynumber.css to /zap/c/anything.css</code></p>
<pre>
RewriteRule ^zap/(j|c)/([a-z]+)-([0-9]+)\.(js|css)$ /zap/$1/$2.$4 [L]
</pre>




<h2>SEO friendly link for non-flash browsers</h2>
<p>When you use flash on your site and you properly supply a link to download flash that shows up for non-flash aware browsers, it is nice to use a shortcut to keep your code clean and your external links to a minimum.  This code allows me to link to <code>site.com/getflash/</code> for non-flash aware browsers.</p>
<pre>
RewriteRule ^getflash/?$ http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash [NC,L,R=307]
</pre>

<h2>Removing the Query_String</h2>
<p>On many sites, the page will be displayed for both page.html and page.html?anything=anything, which hurts your SEO with duplicate content.  An easy way to fix this issue is to redirect external requests containing a query string to the same uri without the query_string.</p>
<pre>
RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* http://www.askapache.com%{REQUEST_URI}? [R=301,L]
</pre>


<h2>Sending requests to a php script</h2>
<p>This .htaccess rewrite example invisibly rewrites requests for all Adobe pdf files to be handled by <code>/cgi-bin/pdf-script.php</code></p>
<pre>
RewriteRule ^(.+)\.pdf$  /cgi-bin/pdf-script.php?file=$1.pdf [L,NC,QSA]
</pre>


<h2>Setting the language variable based on Client</h2>
<p>For sites using multiviews or with multiple language capabilities, it is nice to be able to send the correct language automatically based on the clients preferred language.</p>
<pre>
RewriteCond %{HTTP:Accept-Language} ^.*(de|es|fr|it|ja|ru|en).*$ [NC]
RewriteRule ^(.*)$ - [env=prefer-language:%1]
</pre>



<h2>Deny Access To Everyone Except PHP fopen</h2>
<p>This allows access to all files by php fopen, but denies anyone else.</p>
<pre>
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^.+$ [NC]
RewriteRule .* - [F,L]
</pre>


<p class="cnote">If you are looking for ways to block or deny specific requests/visitors, then you should definately read <a href="http://perishablepress.com/press/2009/02/03/eight-ways-to-blacklist-with-apaches-mod_rewrite/" title="Eight Ways to Blacklist with Apache’s mod_rewrite">Blacklist with mod_rewrite</a>.  I give it a 10/10</p>


<h2>Deny access to anything in a subfolder except php fopen</h2>
<p>This can be very handy if you want to serve media files or special downloads but only through a php proxy script.</p>
<pre>
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/.*\ HTTP [NC]
RewriteRule .* - [F,L]
</pre>





<h2><a href="#require-no-www-in-htaccess" name="require-no-www-in-htaccess" id="require-no-www-in-htaccess" title="Require no www" class="acd">Require no www</a></h2>
<pre>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^askapache\.com$ [NC]
RewriteRule ^(.*)$ http://askapache.com/$1 [R=301,L]
</pre>


<h2><a href="#check-for-key-in-query-string" name="check-for-key-in-query-string" id="check-for-key-in-query-string" title="Search for a key in the query string" class="acd">Check for a key in QUERY_STRING</a></h2>
<p>Uses a <a href="http://askapache.info/trunk/mod/mod_rewrite.html#rewritecond" title="RewriteCond Directive Use in htaccess">RewriteCond</a> Directive to check QUERY_STRING for passkey, if it doesn't find it it redirects all requests for anything in the /logged-in/ directory to the /login.php script.</p>
<pre>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !passkey
RewriteRule ^/logged-in/(.*)$ /login.php [L]
</pre>


<h2><a href="#delete-query-string" name="delete-query-string" id="delete-query-string" title="Remove the query string from url" class="acd">Removes the QUERY_STRING from the URL</a></h2>
<p>If the QUERY_STRING has any value at all besides blank than the<code>?</code>at the end of /login.php? tells mod_rewrite to remove the QUERY_STRING from login.php and redirect.</p>
<pre>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} .
RewriteRule ^login.php /login.php? [L]
</pre>


<h2><a href="#fix-infinite-loop-redirects" name="fix-infinite-loop-redirects" id="fix-infinite-loop-redirects" title="Fix for infinite loops" class="acd">Fix for infinite loops</a></h2>
<p>An error message related to this is<code>Request exceeded the limit of 10 internal redirects due to probable configuration error. Use &#039;LimitInternalRecursion&#039; to increase the limit if necessary. Use &#039;LogLevel debug&#039; to get a backtrace.</code>or you may see<code>Request exceeded the limit</code>,<code>probable configuration error</code>,<code>Use &#039;LogLevel debug&#039; to get a backtrace</code>, or<code>Use &#039;LimitInternalRecursion&#039; to increase the limit if necessary</code></p>
<pre>
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
</pre>


<h2><a href="#external-redirect-php-files-to-html" name="external-redirect-php-files-to-html" id="external-redirect-php-files-to-html" title="External Redirect .php files to .html files (SEO friendly)" class="acd">External Redirect .php files to .html files (SEO friendly)</a></h2>
<pre>
RewriteRule ^(.*)\.php$ /$1.html [R=301,L]
</pre>


<h2><a href="#internal-redirect-php-files-to-html" name="internal-redirect-php-files-to-html" id="internal-redirect-php-files-to-html" title="Internal Redirect .php files to .html files (SEO friendly)" class="acd">Internal Redirect .php files to .html files (SEO friendly)</a></h2>
<p>Redirects all files that end in .html to be served from filename.php  so it looks like all your pages are .html but really they are .php</p>
<pre>
RewriteRule ^(.*)\.html$ $1.php [R=301,L]
</pre>


<h2><a href="#time-based-access" name="time-based-access" id="time-based-access" title="block access to files during certain hours of the day" class="acd">block access to files during certain hours of the day</a></h2>
<pre>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# If the hour is 16 (4 PM) Then deny all access
RewriteCond %{TIME_HOUR} ^16$
RewriteRule ^.*$ - [F,L]
</pre>


<h2><a href="#convert-underscore-hyphen" name="convert-underscore-hyphen" id="convert-underscore-hyphen" title="Change underscores to hyphens for SEO URL" class="acd">Rewrite underscores to hyphens for SEO URL</a></h2>
<p>Converts all underscores "_" in urls to hyphens "-" for SEO benefits...  See the <a href="http://www.askapache.com/htaccess/rewrite-underscores-to-hyphens-for-seo-url.html">full article</a> for more info.</p>
<pre>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
&nbsp;
RewriteRule !\.(html|php)$ - [S=4]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes]
RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes]
&nbsp;
RewriteCond %{ENV:uscor} ^Yes$
RewriteRule (.*) http://d.com/$1 [R=301,L]
</pre>


<h2><a href="#require-www-no-hardcoding" name="require-www-no-hardcoding" id="require-www-no-hardcoding" title="Require the www without hardcoding" class="acd">Require the www without hardcoding</a></h2>
<pre>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.[a-z-]+\.[a-z]{2,6} [NC]
RewriteCond %{HTTP_HOST} ([a-z-]+\.[a-z]{2,6})$     [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]
</pre>


<h2><a href="#require-no-subdomain-1" name="require-no-subdomain-1" id="require-no-subdomain-1" title="Require no subdomain" class="acd">Require no subdomain</a></h2>
<pre>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} \.([a-z-]+\.[a-z]{2,6})$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]
</pre>


<h2><a href="#require-no-subdomain-2" name="require-no-subdomain-2" id="require-no-subdomain-2" title="Require no subdomain" class="acd">Require no subdomain</a></h2>
<pre>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} \.([^\.]+\.[^\.0-9]+)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</pre>


<h2><a href="#redirect-wordpress-feed" name="redirect-wordpress-feed" id="redirect-wordpress-feed" title="Redirecting WordPress Feeds to Feedburner" class="acd">Redirecting WordPress Feeds to Feedburner</a></h2>
<p>Full article:<a href="http://www.askapache.com/htaccess/redirecting-wordpress-feeds-to-feedburner.html" title="Redirecting WordPress Feeds to Feedburner">Redirecting WordPress Feeds to Feedburner</a></p>
<pre>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/feed\.gif$
RewriteRule .* - [L]
&nbsp;
RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]
RewriteRule ^feed/?.*$ http://feeds.feedburner.com/apache/htaccess [L,R=302]
&nbsp;
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</pre>


<h2><a href="#only-allow-get-and-put-requests" name="only-allow-get-and-put-requests" id="only-allow-get-and-put-requests" title="Only allow GET and PUT request methods" class="acd">Only allow GET and PUT Request Methods</a></h2>
<p>Article: <a class="acd" href="http://www.askapache.com/htaccess/apache-status-code-headers-errordocument.html#http-methods-recognized" title="List of Apache Recognized Request Methods">Request Methods</a></p>
<pre>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} !^(GET|PUT)
RewriteRule .* - [F]
</pre>


<h2><a href="#prevent-hotlinking" name="prevent-hotlinking" id="prevent-hotlinking" title="Prevent Files image/file hotlinking and bandwidth stealing" class="acd">Prevent Files image/file hotlinking and bandwidth stealing</a></h2>
<pre>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?askapache.com/.*$ [NC]
RewriteRule \.(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]
</pre>


<h2><a href="#stop-browser-prefetching" name="stop-browser-prefetching" id="stop-browser-prefetching" title="Stop browser prefetching" class="acd">Stop browser prefetching</a></h2>
<pre>
RewriteEngine On
SetEnvIfNoCase X-Forwarded-For .+ proxy=yes
SetEnvIfNoCase X-moz prefetch no_access=yes
&nbsp;
# block pre-fetch requests with X-moz headers
RewriteCond %{ENV:no_access} yes
RewriteRule .* - [F,L]
</pre>



<blockquote cite="http://askapache.info/trunk/mod/mod_rewrite.html#rewritebase">
<p>This module uses a rule-based rewriting engine (based on a regular-expression parser) to rewrite requested URLs on the fly. It supports an unlimited number of rules and an unlimited number of attached rule conditions for each rule, to provide a really flexible and powerful URL manipulation mechanism. The URL manipulations can depend on various tests, of server variables, environment variables, HTTP headers, or time stamps. Even external database lookups in various formats can be used to achieve highly granular URL matching.</p>
<p>This module operates on the full URLs (including the path-info part) both in per-server context (<code>httpd.conf</code>) and per-directory context (<code>.htaccess</code>) and can generate query-string parts on result. The rewritten result can lead to internal sub-processing, external request redirection or even to an internal proxy throughput.</p>
<p>Further details, discussion, and examples, are provided in the <a href="http://askapache.info/trunk/rewrite/index.html">detailed mod_rewrite documentation</a>.</p>
</blockquote>
<h2>Directives</h2>
<ul>
    <li><a href="http://askapache.info/trunk/mod/mod_rewrite.html#rewritebase">RewriteBase</a></li>
    <li><a href="http://askapache.info/trunk/mod/mod_rewrite.html#rewritecond">RewriteCond</a></li>
    <li><a href="http://askapache.info/2.2/mod/mod_rewrite.html#rewriteengine">RewriteEngine</a></li>
    <li><a href="http://askapache.info/trunk/mod/mod_rewrite.html#rewritelock">RewriteLock</a></li>
    <li><a href="http://askapache.info/2.0/mod/mod_rewrite.html#rewritelog">RewriteLog</a></li>
    <li><a href="http://askapache.info/trunk/mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></li>
    <li><a href="http://askapache.info/trunk/mod/mod_rewrite.html#rewritemap">RewriteMap</a></li>
    <li><a href="http://askapache.info/1.3/mod/mod_rewrite.html#rewriteoptions">RewriteOptions</a></li>
    <li><a href="http://askapache.info/trunk/mod/mod_rewrite.html#rewriterule">RewriteRule</a></li>
</ul>



<p>If you aren't already comfortable using mod_rewrite then I recommend this <a href="http://check-these.info/mod_rewrite-basic.html">excellent mod_rewrite guide</a> by one of my favorite mod_rewrite gurus that I've met.</p>



<hr />
<h2>htaccess Guide Sections</h2>
<ul class="ou">
    <li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/htaccess-for-webmasters.html" title="Apache HTTP Web Server htaccess tips and tricks">htaccess tricks for Webmasters</a></li>
    <li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html" title="Creating and using HTTP Headers with htaccess">HTTP Header control with htaccess</a></li>
    <li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/php-htaccess-tips-and-tricks.html" title="mod_php or php as a cgi with htaccess tips, htaccess php tricks">PHP on Apache tips and tricks</a></li>
    <li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/seo-search-engine-friendly-redirects-without-mod_rewrite.html" title="SEO-Friendly 301 Redirects without mod_rewrite">SEO Redirects without mod_rewrite</a></li>
    <li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html" title="mod_rewrite tips and tricks with RewriteEngine, RewriteBase, RewriteRule, and RewriteCond">mod_rewrite examples, tips, and tricks</a></li>
    <li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/speed-up-your-site-with-caching-and-cache-control.html" title="Caching, cache-control, cache, expires, and optimizing htaccess">HTTP Caching and Site Speedups</a></li>
    <li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/apache-authentication-in-htaccess.html" title="htaccess and Apache authentication with htpasswd, 401, and 403">Authentication on Apache</a></li>
    <li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/security-with-htaccess.html" title="Security, hacking, and anti-hacking tips and tricks for htaccess">htaccess Security Tricks and Tips</a></li>
    <li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/ssl-example-usage-in-htaccess.html" title="Apache SSL examples">SSL tips and examples</a></li>
    <li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/apache-variable-fun-in-htaccess.html" title="Apache variables info, tricks, and tips">Variable Fun (mod_env) Section</a></li><li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/mod_security-htaccess-tricks.html" title="mod_security Guide and sample mod_Security diretive usage in .htaccess">.htaccess Security with MOD_SECURITY</a></li><li><a rel="chapter bookmark" href="http://www.askapache.com/htaccess/setenvif.html" title="SetEnvIf and SetEnvIfNoCase Examples for conditionally setting variables in Apache .htaccess">SetEnvIf and SetEnvIfNoCase Examples</a></li>
</ul>


<p class="ment"><a rel="prev" href="http://www.askapache.com/htaccess/seo-search-engine-friendly-redirects-without-mod_rewrite.html" title="Use htaccess to create SEO-Friendly 301 Redirects without mod_rewrite">&laquo;  Search Engine Friendly Redirects</a> | <a href="http://www.askapache.com/htaccess/htaccess.html" class="acd1" rel="Contents Index Start" title=".htaccess tutorial">.htaccess Tutorial Index</a> | <a rel="next" href="http://www.askapache.com/htaccess/speed-up-your-site-with-caching-and-cache-control.html" title="The Apache method for speeding up sites with Caching, cache-control, cache, expires, and optimizing htaccess">&raquo;  Speed up your site with Caching and cache-control</a></p><p><a href="http://www.askapache.com/htaccess/modrewrite-tips-tricks.html"></a><a href="http://www.askapache.com/htaccess/modrewrite-tips-tricks.html">Htaccess Rewrites &#8211; Rewrite Tricks and Tips</a> originally appeared on <cite>AskApache.com</cite> </p>]]></content:encoded>
			<wfw:commentRss>http://www.askapache.com/htaccess/modrewrite-tips-tricks.html/feed</wfw:commentRss>
		<slash:comments>130</slash:comments>
		</item>
	</channel>
</rss>

