2003-12-10 19:22:36 -05:00
< ? php
2004-08-24 04:43:01 -04:00
if ( ! isset ( $wp_did_header )) :
2005-02-13 19:49:03 -05:00
if ( ! file_exists ( dirname ( __FILE__ ) . '/wp-config.php' ) ) {
if ( strstr ( $_SERVER [ 'PHP_SELF' ], 'wp-admin' ) ) $path = '' ;
else $path = 'wp-admin/' ;
die ( " There doesn't seem to be a <code>wp-config.php</code> file. I need this before we can get started. Need more help? <a href='http://wordpress.org/docs/faq/#wp-config'>We got it</a>. You can <a href=' { $path } setup-config.php'>create a <code>wp-config.php</code> file through a web interface</a>, but this doesn't work for all server setups. The safest way is to manually create the file. " );
}
2003-12-10 19:22:36 -05:00
2005-02-13 16:20:00 -05:00
$wp_did_header = true ;
2004-07-06 13:58:48 -04:00
require_once ( dirname ( __FILE__ ) . '/wp-config.php' );
2003-12-10 19:22:36 -05:00
2004-08-27 16:59:38 -04:00
$query_vars = array ();
// Process PATH_INFO and 404.
if (( isset ( $_GET [ 'error' ]) && $_GET [ 'error' ] == '404' ) ||
2004-12-03 19:09:40 -05:00
(( ! empty ( $_SERVER [ 'PATH_INFO' ])) &&
( '/' != $_SERVER [ 'PATH_INFO' ]) &&
2004-12-08 17:00:26 -05:00
( false === strpos ( $_SERVER [ 'PATH_INFO' ], 'index.php' ))
2004-12-03 19:09:40 -05:00
)) {
2004-08-27 16:59:38 -04:00
2004-09-19 00:19:16 -04:00
// If we match a rewrite rule, this will be cleared.
$error = '404' ;
// Fetch the rewrite rules.
2004-12-02 21:38:11 -05:00
$rewrite = $wp_rewrite -> wp_rewrite_rules ();
2004-09-19 00:19:16 -04:00
if ( ! empty ( $rewrite )) {
$pathinfo = $_SERVER [ 'PATH_INFO' ];
$req_uri = $_SERVER [ 'REQUEST_URI' ];
$home_path = parse_url ( get_settings ( 'home' ));
$home_path = $home_path [ 'path' ];
// Trim path info from the end and the leading home path from the
// front. For path info requests, this leaves us with the requesting
// filename, if any. For 404 requests, this leaves us with the
// requested permalink.
$req_uri = str_replace ( $pathinfo , '' , $req_uri );
$req_uri = str_replace ( $home_path , '' , $req_uri );
$req_uri = trim ( $req_uri , '/' );
$pathinfo = trim ( $pathinfo , '/' );
// The requested permalink is in $pathinfo for path info requests and
// $req_uri for other requests.
if ( ! empty ( $pathinfo )) {
$request = $pathinfo ;
} else {
$request = $req_uri ;
}
2004-02-16 21:50:57 -05:00
2004-09-19 00:19:16 -04:00
// Look for matches.
$request_match = $request ;
foreach ( $rewrite as $match => $query ) {
// If the requesting file is the anchor of the match, prepend it
// to the path info.
2004-08-27 16:59:38 -04:00
if (( ! empty ( $req_uri )) && ( strpos ( $match , $req_uri ) === 0 )) {
$request_match = $req_uri . '/' . $request ;
}
2004-02-16 21:50:57 -05:00
2004-09-19 00:19:16 -04:00
if ( preg_match ( " !^ $match ! " , $request_match , $matches )) {
// Got a match.
// Trim the query of everything up to the '?'.
$query = preg_replace ( " !^.+ \ ?! " , '' , $query );
2004-02-16 21:50:57 -05:00
2004-09-19 00:19:16 -04:00
// Substitute the substring matches into the query.
eval ( " \$ query = \" $query\ " ; " );
2004-02-16 21:50:57 -05:00
2004-09-19 00:19:16 -04:00
// Parse the query.
parse_str ( $query , $query_vars );
2004-08-27 16:59:38 -04:00
2004-09-19 00:19:16 -04:00
// If we're processing a 404 request, clear the error var
// since we found something.
if ( isset ( $_GET [ 'error' ])) {
unset ( $_GET [ 'error' ]);
}
2004-08-27 16:59:38 -04:00
2004-09-19 00:19:16 -04:00
if ( isset ( $error )) {
unset ( $error );
}
2004-09-11 12:12:40 -04:00
2004-09-19 00:19:16 -04:00
break ;
}
}
}
}
2004-02-16 21:50:57 -05:00
2005-01-31 20:49:51 -05:00
$wpvarstoreset = array ( 'm' , 'p' , 'posts' , 'w' , 'cat' , 'withcomments' , 's' , 'search' , 'exact' , 'sentence' , 'preview' , 'debug' , 'calendar' , 'page' , 'paged' , 'more' , 'tb' , 'pb' , 'author' , 'order' , 'orderby' , 'year' , 'monthnum' , 'day' , 'hour' , 'minute' , 'second' , 'name' , 'category_name' , 'feed' , 'author_name' , 'static' , 'pagename' , 'page_id' , 'error' );
2003-12-10 19:22:36 -05:00
2004-12-03 19:09:40 -05:00
$wpvarstoreset = apply_filters ( 'query_vars' , $wpvarstoreset );
2004-07-06 13:58:48 -04:00
for ( $i = 0 ; $i < count ( $wpvarstoreset ); $i += 1 ) {
$wpvar = $wpvarstoreset [ $i ];
if ( ! isset ( $$wpvar )) {
if ( empty ( $_POST [ $wpvar ])) {
2004-08-27 16:59:38 -04:00
if ( empty ( $_GET [ $wpvar ]) && empty ( $query_vars [ $wpvar ])) {
2004-07-06 13:58:48 -04:00
$$wpvar = '' ;
} elseif ( ! empty ( $_GET [ $wpvar ])) {
$$wpvar = $_GET [ $wpvar ];
} else {
2004-08-27 16:59:38 -04:00
$$wpvar = $query_vars [ $wpvar ];
2004-07-06 13:58:48 -04:00
}
} else {
$$wpvar = $_POST [ $wpvar ];
}
}
}
2003-12-10 19:22:36 -05:00
2004-05-09 01:54:17 -04:00
// Sending HTTP headers
2004-02-21 22:29:54 -05:00
2005-02-13 15:01:41 -05:00
if ( ! empty ( $error ) && '404' == $error ) {
2005-02-13 23:29:53 -05:00
@ header ( 'HTTP/1.x 404 Not Found' );
2005-02-13 15:01:41 -05:00
} else if ( empty ( $feed ) ) {
2005-01-02 19:14:42 -05:00
@ header ( 'X-Pingback: ' . get_bloginfo ( 'pingback_url' ));
2005-02-13 23:36:57 -05:00
@ header ( 'Content-type: ' . get_option ( 'html_type' ) . '; charset=' . get_option ( 'blog_charset' ));
2004-02-21 22:29:54 -05:00
} else {
// We're showing a feed, so WP is indeed the only thing that last changed
2004-10-14 04:27:56 -04:00
if ( $withcomments )
$wp_last_modified = mysql2date ( 'D, d M Y H:i:s' , get_lastcommentmodified ( 'GMT' ), 0 ) . ' GMT' ;
else
$wp_last_modified = mysql2date ( 'D, d M Y H:i:s' , get_lastpostmodified ( 'GMT' ), 0 ) . ' GMT' ;
2004-07-06 13:58:48 -04:00
$wp_etag = '"' . md5 ( $wp_last_modified ) . '"' ;
2004-10-14 04:27:56 -04:00
@ header ( " Last-Modified: $wp_last_modified " );
@ header ( " ETag: $wp_etag " );
2005-01-02 19:14:42 -05:00
@ header ( 'X-Pingback: ' . get_bloginfo ( 'pingback_url' ));
2004-03-30 22:54:58 -05:00
2004-03-31 16:19:58 -05:00
// Support for Conditional GET
2004-05-10 03:51:50 -04:00
if ( isset ( $_SERVER [ 'HTTP_IF_MODIFIED_SINCE' ])) $client_last_modified = $_SERVER [ 'HTTP_IF_MODIFIED_SINCE' ];
else $client_last_modified = false ;
if ( isset ( $_SERVER [ 'HTTP_IF_NONE_MATCH' ])) $client_etag = stripslashes ( $_SERVER [ 'HTTP_IF_NONE_MATCH' ]);
else $client_etag = false ;
2004-03-31 16:19:58 -05:00
if ( ( $client_last_modified && $client_etag ) ?
(( $client_last_modified == $wp_last_modified ) && ( $client_etag == $wp_etag )) :
(( $client_last_modified == $wp_last_modified ) || ( $client_etag == $wp_etag )) ) {
2004-05-21 18:33:47 -04:00
if ( preg_match ( '/cgi/' , php_sapi_name ()) ) {
header ( 'HTTP/1.1 304 Not Modified' );
echo " \r \n \r \n " ;
exit ;
} else {
2005-01-02 19:14:42 -05:00
if ( version_compare ( phpversion (), '4.3.0' , '>=' ) ) {
2004-05-21 18:33:47 -04:00
header ( 'Not Modified' , TRUE , 304 );
} else {
header ( 'HTTP/1.x 304 Not Modified' );
}
2004-07-06 14:20:11 -04:00
exit ;
2004-05-21 18:33:47 -04:00
}
2004-03-30 22:54:58 -05:00
}
2004-02-21 22:29:54 -05:00
}
2003-12-10 19:22:36 -05:00
2004-05-23 22:55:39 -04:00
$use_gzipcompression = get_settings ( 'gzipcompression' );
2004-02-24 23:08:54 -05:00
2004-10-27 19:58:40 -04:00
$more_wpvars = array ( 'posts_per_page' , 'posts_per_archive_page' , 'what_to_show' , 'showposts' , 'nopaging' );
2004-02-10 23:51:19 -05:00
2004-05-23 22:55:39 -04:00
// Construct the query string.
$query_string = '' ;
foreach ( array_merge ( $wpvarstoreset , $more_wpvars ) as $wpvar ) {
2004-07-06 13:58:48 -04:00
if ( $$wpvar != '' ) {
$query_string .= ( strlen ( $query_string ) < 1 ) ? '' : '&' ;
$query_string .= $wpvar . '=' . rawurlencode ( $$wpvar );
}
2004-02-10 23:51:19 -05:00
}
2004-06-20 18:36:45 -04:00
$query_string = apply_filters ( 'query_string' , $query_string );
2004-05-23 22:55:39 -04:00
update_category_cache ();
2003-12-10 19:22:36 -05:00
2004-05-23 22:55:39 -04:00
// Call query posts to do the work.
$posts = query_posts ( $query_string );
2003-12-10 19:22:36 -05:00
2004-10-27 18:07:58 -04:00
// Extract updated query vars back into global namespace.
extract ( $wp_query -> query_vars );
2004-05-23 22:55:39 -04:00
if ( 1 == count ( $posts )) {
2005-02-13 15:32:24 -05:00
$more = 1 ;
$single = 1 ;
2003-12-10 19:22:36 -05:00
}
2004-11-09 23:01:46 -05:00
// Issue a 404 if a permalink request doesn't match any posts. Don't issue a
// 404 if one was already issued, if the request was a search, or if the
// request was a regular query string request rather than a permalink request.
if ( ( 0 == count ( $posts )) && ! is_404 () && ! is_search ()
&& ! empty ( $_SERVER [ 'QUERY_STRING' ]) &&
( false === strpos ( $_SERVER [ 'REQUEST_URI' ], '?' )) ) {
$wp_query -> is_404 = true ;
2005-01-02 19:14:42 -05:00
header ( 'HTTP/1.x 404 Not Found' );
2004-11-09 23:01:46 -05:00
}
2004-08-24 04:43:01 -04:00
// Template redirection
2005-02-13 15:38:28 -05:00
if ( defined ( 'WP_USE_THEMES' ) && constant ( 'WP_USE_THEMES' ) ) {
do_action ( 'template_redirect' );
if ( is_feed () && empty ( $doing_rss ) ) {
include ( ABSPATH . '/wp-feed.php' );
exit ;
2005-02-13 16:25:08 -05:00
} else if ( is_trackback () && empty ( $doing_trackback ) ) {
2005-02-13 15:38:28 -05:00
include ( ABSPATH . '/wp-trackback.php' );
exit ;
} else if ( is_404 () && get_404_template () ) {
include ( get_404_template ());
exit ;
} else if ( is_search () && get_search_template () ) {
include ( get_search_template ());
exit ;
} else if ( is_home () && get_home_template () ) {
include ( get_home_template ());
exit ;
} else if ( is_single () && get_single_template () ) {
include ( get_single_template ());
exit ;
} else if ( is_page () && get_page_template () ) {
include ( get_page_template ());
exit ;
} else if ( is_category () && get_category_template ()) {
include ( get_category_template ());
exit ;
} else if ( is_author () && get_author_template () ) {
include ( get_author_template ());
exit ;
} else if ( is_date () && get_date_template () ) {
include ( get_date_template ());
exit ;
} else if ( is_archive () && get_archive_template () ) {
include ( get_archive_template ());
exit ;
} else if ( is_paged () && get_paged_template () ) {
include ( get_paged_template ());
exit ;
} else if ( file_exists ( TEMPLATEPATH . " /index.php " ) ) {
include ( TEMPLATEPATH . " /index.php " );
exit ;
2004-09-13 04:05:30 -04:00
}
2005-02-13 16:20:00 -05:00
} else {
// Process feeds and trackbacks even if not using themes.
if ( is_feed () && empty ( $doing_rss ) ) {
include ( ABSPATH . '/wp-feed.php' );
exit ;
2005-02-13 16:25:08 -05:00
} else if ( is_trackback () && empty ( $doing_trackback ) ) {
2005-02-13 16:20:00 -05:00
include ( ABSPATH . '/wp-trackback.php' );
exit ;
}
2004-05-31 19:35:32 -04:00
}
2004-01-07 12:36:54 -05:00
if ( $pagenow != 'post.php' && $pagenow != 'edit.php' ) {
2004-07-06 13:58:48 -04:00
if ( get_settings ( 'gzipcompression' ) )
gzip_compression ();
2003-12-10 19:22:36 -05:00
}
2004-05-24 04:22:18 -04:00
2005-02-13 16:20:00 -05:00
endif ;
2004-05-24 04:22:18 -04:00
?>