I have a hosted site and I’m having trouble configuring Joomla (running Joomla + php + mySQL on IIS7 + win server 2008). I have a similar configuration running on a local machine (Joomla + php + mySQL on IIS7 + vista x64), so I was at least able to follow instructions showed in various tutorials on how to set this up.
This symptom with the hosted site is that I can’t turn on any SEO settings in Joomla (not even the first setting, “Search Engine Friendly URLs”). I get either 404 (file not found) or the URL appears correctly rewritten but it’s always the home page’s content that is displayed. I had a similar issue on my home machine and it turns out to have been because I wasn’t using FastCGI to host php, so I decided to investigate that on the hosted site.
Anyway, I noticed in the web.config file of the directory hosting joomla on the hosted site the following line:
<add name="Plesk_Handler_3522909676" path="*.php" verb="*" modules="IsapiModule" scriptProcessor="c:program files (x86)parallelspleskadditionalpleskphp5php5isapi.dll" resourceType="Either" />
From past experience, I know that php has some issues when not running under fastCGI. I noticed the web.config in the root folder used the following line instead:
<add name="Plesk_Handler_0286090609" path="*.php" verb="*" modules="CgiModule" scriptProcessor="c:program files (x86)parallelspleskadditionalpleskphp5php-cgi.exe" resourceType="Either" />
I copied that in the web.config in the joomla directory, and got different behavior… but still not working. If I load a .php file in the joomla directory that runs phpInfo(), under Server API it says CGI/FastCGI . Is that positive confirmation that FastCGI is being used? Why does the handler in the web config point to modules=”CgiModule” instead of modules=”FastCgiModule” (I’m not even sure that exists, but I just find the mention of CgiModule suspicious).
It’s a hosted site, so as far as I know I don’t have access to ApplicationHost.config file…
8
Answers
Here's a simple test:
inside;
Request http://yoursite.com/phpinfo.php/foobar?foo=bar
Check the output of phpinfo and look for _SERVER["REQUEST_URI"].
If this variable is missing, then CGI is used. If the variable is present and correctly set to /phpinfo.php/foobar?foo=bar, then either ISAPI or FastCGI is used. Look near the top of the output for Server API; it should be set to either ISAPI (which means ISAPI is being used) or CGI/FastCGI (which means FastCGI is being used, since we already ruled out CGI).
You should see a referenced to it from
Server API = CGI/FastCGI
Joomla creates a .htaccess file with rewrite rules in it to enable search engine friendly URLs. If you’re using Apache you will need to have to set “AllowOverride FileInfo” for the directory containing your joomla installation. If you are using IIS you will need a module such as IISModRewrite. Here are instructions for this: [http://www.micronovae.com/ModRewrite/articles/SEFJoomla.html%5D
Unfortunately, the checking
_SERVER["REQUEST_URI"]
didn’t work for me. Using CGI or FastCGI, it always displayed/phpinfo.php/foobar?foo=bar
.Neither did seeing if
Server API = CGI/FastCGI
was set – that only tells you what interfaces the compiled version of php supports, not what is being used. However, I found another method that may work more reliably.Plonk a file in place called phpinfo.php containing the text:
<? php phpinfo(); ?>
Check for the variable
_ENV["REDIRECT_HANDLER"]
:If it is set to
php5-fastcgi
(or something else fastcgi-ish) the request most probably went through FastCGI. If it is set toapplication/x-httpd-php
(or I assume something other than the above), you are using CGI.However, a surefire way is by running a little test. You need the
ab
(Apache Bench) tool for this.Both with and without CGI, run this from another machine:
Check the line
Time taken for tests:
. On my box at least, accessing my VPS over a 1.3Mbps ADSL connection, FastCGI completely maxed it out, while with CGI was only able to fill half of it.Hope this helps.
Make sure things are set up initially to where the script fails completely when fastcgi isn’t running. Then you’ll know, when it works, that fastcgi daemon is the reason.
This worked for me.
You can use (on centos)
apachectl -M
, you’ll show what modules are enabled:php_sapi_name() or PHP_SAPI, both work.
http://php.net/manual/en/function.php-sapi-name.php