* @package MediaWiki
*/
+/** */
require_once( 'Revision.php' );
/**
class RawPage {
function RawPage( $article ) {
- global $wgRequest, $wgInputEncoding, $wgSquidMaxage;
- $allowedCTypes = array('text/x-wiki', 'text/javascript', 'text/css', 'application/x-zope-edit');
+ global $wgRequest, $wgInputEncoding, $wgSquidMaxage, $wgJsMimeType;
+ $allowedCTypes = array('text/x-wiki', $wgJsMimeType, 'text/css', 'application/x-zope-edit');
$this->mArticle =& $article;
$this->mTitle =& $article->mTitle;
} else if ($gen == 'js') {
$this->mGen = $gen;
if($smaxage == '') $smaxage = $wgSquidMaxage;
- if($ctype == '') $ctype = 'text/javascript';
+ if($ctype == '') $ctype = $wgJsMimeType;
} else {
$this->mGen = false;
}
function view() {
global $wgUser, $wgOut, $wgScript;
- if( strcmp( $wgScript, $_SERVER['PHP_SELF'] ) ) {
+ if( isset( $_SERVER['SCRIPT_URL'] ) ) {
+ # Normally we use PHP_SELF to get the URL to the script
+ # as it was called, minus the query string.
+ #
+ # Some sites use Apache rewrite rules to handle subdomains,
+ # and have PHP set up in a weird way that causes PHP_SELF
+ # to contain the rewritten URL instead of the one that the
+ # outside world sees.
+ #
+ # If in this mode, use SCRIPT_URL instead, which mod_rewrite
+ # provides containing the "before" URL.
+ $url = $_SERVER['SCRIPT_URL'];
+ } else {
+ $url = $_SERVER['PHP_SELF'];
+ }
+ if( strcmp( $wgScript, $url ) ) {
# Internet Explorer will ignore the Content-Type header if it
# thinks it sees a file extension it recognizes. Make sure that
# all raw requests are done through the script node, which will
# have eg '.php' and should remain safe.
-
- $destUrl = $this->mTitle->getFullUrl(
- 'action=raw' .
- '&ctype=' . urlencode( $this->mContentType ) .
- '&smaxage=' . urlencode( $this->mSmaxage ) .
- '&maxage=' . urlencode( $this->mMaxage ) .
- '&gen=' . urlencode( $this->mGen ) .
- '&oldid=' . urlencode( $this->mOldId ) );
- header( 'Location: ' . $destUrl );
- $wgOut->disable();
+ #
+ # We used to redirect to a canonical-form URL as a general
+ # backwards-compatibility / good-citizen nice thing. However
+ # a lot of servers are set up in buggy ways, resulting in
+ # redirect loops which hang the browser until the CSS load
+ # times out.
+ #
+ # Just return a 403 Forbidden and get it over with.
+ wfHttpError( 403, 'Forbidden',
+ 'Raw pages must be accessed through the primary script entry point.' );
return;
}
global $wgInputEncoding, $wgContLang;
$fname = 'RawPage::getrawtext';
- if( !$this->mTitle ) return '';
-
- # Special case for MediaWiki: messages; we can hit the message cache.
- if( $this->mTitle->getNamespace() == NS_MEDIAWIKI) {
- $rawtext = wfMsg( $this->mTitle->getDbkey() );
- return $rawtext;
+ if( $this->mTitle ) {
+ # Special case for MediaWiki: messages; we can hit the message cache.
+ if( $this->mTitle->getNamespace() == NS_MEDIAWIKI) {
+ $rawtext = wfMsgForContent( $this->mTitle->getDbkey() );
+ return $rawtext;
+ }
+
+ # else get it from the DB
+ $rev = Revision::newFromTitle( $this->mTitle, $this->mOldId );
+ if( $rev ) {
+ $lastmod = wfTimestamp( TS_RFC2822, $rev->getTimestamp() );
+ header( 'Last-modified: ' . $lastmod );
+ return $rev->getText();
+ }
}
- # else get it from the DB
- $rev = Revision::newFromTitle( $this->mTitle, $this->mOldId );
- if( $rev ) {
- $lastmod = wfTimestamp( TS_RFC2822, $rev->getTimestamp() );
- header( 'Last-modified: ' . $lastmod );
- return $rev->getText();
- } else {
- return '';
+ # Bad title or page does not exist
+ if( $this->mContentType == 'text/x-wiki' ) {
+ # Don't return a 404 response for CSS or JavaScript;
+ # 404s aren't generally cached and it would create
+ # extra hits when user CSS/JS are on and the user doesn't
+ # have the pages.
+ header( "HTTP/1.0 404 Not Found" );
}
+ return '';
}
}
?>