[wpmu-trac] [WordPress MU Trac] #502: SCRIPT_NAME with CGI script in
subdirectory causes failed install
WordPress MU Trac
wpmu-trac at lists.automattic.com
Mon Nov 19 19:09:33 GMT 2007
#502: SCRIPT_NAME with CGI script in subdirectory causes failed install
------------------------+---------------------------------------------------
Reporter: alexbcoles | Owner: somebody
Type: defect | Status: new
Priority: normal | Milestone: WPMU 1.0
Component: component1 | Version:
Severity: normal | Keywords:
------------------------+---------------------------------------------------
'''Background: '''
I have had some difficulty trying to install WordPress MU for a client (a
major university). In this case, PHP is available as CGI, rather than as
an Apache Module. The {{{_SERVER["SCRIPT_FILENAME"]}}} variable is
reported as {{{/cgi-php5/php}}}.
I managed to resolve the issues through use of a workaround - which I
detail below. In this case
'''Affected functions: '''
Initial installation and usage.
'''Steps to replicate: '''
* Install Apache.
* Install PHP as CGI, within a subdirectory of the cgi-bin.
* Attempt to install WordPress MU.
''' Analysis: '''
The "regular" installation instructions '''will not install''' !WordPress
MU.
The problematic _SERVER scoped variables are:
{{{ _SERVER["SCRIPT_FILENAME"] }}} which is reported as {{{
/usr/local/opt/php/php-5.2.1/bin/php }}}.
{{{ _SERVER["SCRIPT_NAME"] }}} which is reported as {{{ /cgi-php5/php }}}.
* See also http://wordpress.org/support/topic/33564 for how this
affects a regular (non multiuser) installation of !WordPress.
* See http://mu.wordpress.org/forums/topic.php?id=5529 for a similar
issue in a WordPress MU installation.
The misconfiguration in the generated configuration files includes:
* $base in generated wp-config.php incorrectly defined as 'cgi-php5'.
* RewriteBase in generated .htaccess incorrectly defined as 'cgi-php5'.
* the following database values are set incorrectly:
tables for multi-user support:
|| '''table name''' || '''column name''' || '''column value''' ||
|| wp_blogs || path || /cgi-php5/ ||
|| wp_site || path || /cgi-php5/ ||
the default blog:
|| '''table name''' || '''column name''' || '''column value''' ||
|| wp_1_comments || comment_author_url || http://ucl.ac.uk/cgi-php5/ ||
|| wp_1_options || siteurl || http://ucl.ac.uk/cgi-php5/ ||
|| wp_1_options || home || http://ucl.ac.uk/cgi-php5/ ||
|| wp_1_options || fileupload_url || http://ucl.ac.uk/cgi-php5/files ||
=== Workaround 1 : Possible Manual Workaround ===
The first attempt was to see if a manual workaround is possible, after an
incorrect installation:
1. go through database and fix table values listed above manually.
2. fix generated '''wp-config.php''':
{{{
cp wp-config.php wp-config.php2
pico wp-config.php2
}}}
changing:
{{{
$base = '/cgi-php5/';
}}}
to:
{{{
$base = '/site/blogs/';
}}}
{{{
rm wp-config.php
}}}
(select override YES, must be in BASH shell to do this)
{{{
mv wp-config.php2 wp-config.php
chmod 644 wp-config.php
}}}
3. fix '''.htaccess'''' by removing it:
{{{
rm .htaccess
}}}
and replacing with this new '''.htaccess''':
{{{
RewriteEngine On
RewriteBase /site/blogs/
#uploaded files
RewriteRule ^(.*/)?files/$ index.php [L]
RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
}}}
4. Fix ownership of '''.htaccess'''
{{{
chown www-process
chmod 600 .htaccess
}}}
----
== Step-By-Step Workaround ==
=== Unsuccessful Installation Removal ===
''' WARNING: Before following these instructions, ensure any remnants of
previous unsuccessful installations are removed: '''
* remove all database tables.
* either remove the whole blog directory: {{{ rm -Rf blogs/ }}} or, at
the very least, remove the following generated files:
{{{
rm .htaccess
rm wp-config.php
}}}
=== Basic Installation ===
The first part of the instructions closely mirror the
[http://mu.wordpress.org/download/ official installation instructions],
albeit in more detail:
* create a blank database for !WordPress MU through either the command
line or phpMyAdmin.
* login to your account through SSH.
* switch to the bash shell and cd in to your webdocs directory:
{{{
bash
cd www
}}}
* download !WordPress MU:
{{{
wget http://mu.wordpress.org/latest.zip
unzip latest.zip
}}}
* rename the directory to whatever you want your URL to appear as.
{{{
mv wordpress-mu-1.3 blogs
}}}
(In this case if we want http://ucl.ac.uk/dutch/blogs/ for our blogs
subsite, rename to blogs)
* clean-up, by removing the zip file:
{{{
rm latest.zip
}}}
=== Patching the Install Files ===
* At this point, if you follow the regular installation routine for
!WordPress MU, you would proceed to visit
http://yoursite.com/subsite/blogs/, which generates all of the required
configuration files through a web interface. ''' VERY IMPORTANT : don't
follow this part of the instructions just yet.''' Instead, its necessary
to patch some of the installer files to make the site work with the
ucl.ac.uk hosting environment.
* cd into your blog directory, and open the '''wp-settings.php''' file
in your favourite text editor (pico in this example, but vi or
[http://www.mssl.ucl.ac.uk/www_computing/buns/emacs.html emacs] do the job
equally well, if not better)
{{{
cd blogs
pico wp-settings.php
}}}
* at line 68, add the following:
{{{
#!php
// Fix for hosting that sets SCRIPT_FILENAME to something ending in
/bin/php for all requests
if ( isset($_SERVER['SCRIPT_FILENAME']) && (
strpos($_SERVER['SCRIPT_FILENAME'], 'bin/php') ==
strlen($_SERVER['SCRIPT_FILENAME']) - 7 ) )
$_SERVER['SCRIPT_FILENAME'] = $_SERVER['PATH_TRANSLATED'];
}}}
* and at line 76:
{{{
#!php
if (strpos($_SERVER['SCRIPT_NAME'], 'cgi-php5') !== false)
unset($_SERVER['PATH_INFO']);
}}}
* close and save the files (CTRL/o, followed by CTRL/x in pico)
* open '''index_install.php''' and replace three instances of
{{{
$base = stripslashes( dirname( $_SERVER["SCRIPT_NAME"] ) );
}}}
with
{{{
$base = stripslashes( dirname( $_SERVER["PHP_SELF"] ) );
}}}
(CTRL/W allows you to find in pico)
* then proceed with installation as normal, first by fixing the
permissions:
{{{
chmod 777 /home/user/www/public/subsite/blogs
/home/user/www/public/subsite/blogs/wp-content/
}}}
* then visit: http://yoursite.com/subsite/blogs/
* follow the on-screen instructions:
* select sub-directories for Blog Addresses type.
* add your database parameters, and site name, etc.
* your !WordPress MU site should set-up correctly. You can then proceed
to login as WP admin and set up multiple user blogs.
* as !WordPress reminds you for security reasons, after the
installation reset the following directory permissions:
{{{
chmod 755 /home/user/www/public/subsite/blogs
/home/user/www/public/subsite/blogs/wp-content/
}}}
--
Ticket URL: <http://trac.mu.wordpress.org/ticket/502>
WordPress MU Trac <http://mu.wordpress.org/>
WordPress Multiuser
More information about the wpmu-trac
mailing list