httpd-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Riccardo Cohen <r.co...@realty-property.com>
Subject Re: [users@httpd] moving from mod_php to mod_fcgid : rewrite problem
Date Wed, 13 Feb 2013 21:14:19 GMT
Hi Ben

>> I tried without the dot : RewriteRule ^en/(.*) index.php/en/$1 but it
>> gave also an error 404.
>
> It would be helpful to know what, exactly, appears in Apache's access
> log (and/or error log, if you can manage to find that, too) in each of
> these test cases.

I've asked for the apache error log, and found no error in it.
Only one which was a request done before adding the new .htaccess, but 
nothing else :

[Tue Feb 12 21:04:17 2013] [error] [client 90.24.101.9] File does not 
exist: /datas/vol1/w4a125552/var/www/perspectives-musicales.org/test6


The access log show all requests normally with no particular message :

90.24.101.9 - - [12/Feb/2013:21:04:46 +0100] "GET /test1/a/b/c HTTP/1.1" 
404 45 "-" "Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 
Firefox/18.0" "20130212210446"

90.24.101.9 - - [12/Feb/2013:21:04:51 +0100] "GET /test2/a/b/c HTTP/1.1" 
200 52 "-" "Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 
Firefox/18.0" "20130212210451"

90.24.101.9 - - [12/Feb/2013:21:04:56 +0100] "GET /test4/a/b/c HTTP/1.1" 
302 206 "-" "Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 
Firefox/18.0" "20130212210456"

90.24.101.9 - - [12/Feb/2013:21:03:28 +0100] "GET /test5/a/b/c HTTP/1.1" 
404 45 "-" "Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 
Firefox/18.0" "20130212210328"

90.24.101.9 - - [12/Feb/2013:21:04:17 +0100] "GET /test6/a/b/c HTTP/1.1" 
404 45 "-" "Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 
Firefox/18.0" "20130212210417"


>
>> These are all my tests : (available at
>> http://www.perspectives-musicales.org/test1/a/b/c etc.)
>>
>> RewriteRule ^test1/(.*) ./test.php/$1
>> # = error 404
>
> I hit this URL and from what I can tell, the 404 response header is
> coming from PHP, not Apache. The output is "No input file specified."
> This doesn't look like a "stock" Apache 404 response. Did you build
> logic into test.php that emits a 404 response header and this message
> when some parameter is absent from the URL?

test.php is only this :

ok test
<br>
<?
$info=$_SERVER["PATH_INFO"];
echo "INFO=".$info."<br>";
$query=$_SERVER["QUERY_STRING"];
echo "query=".$query."<br>";
?>

maybe the error comes from mod_fcgid itself ?

>
>> RewriteRule ^test2/(.*) ./test.php?$1
>> # = parameters are in query_string instead of path_info
>
> Why is this a problem?

My whole web application is developped with urls like

http://www.perspectives-musicales.org/en/all-associations

for search engine optimizations, where "en" and "all-associations" are 
not pages or directories, but program arguments (replacing 
"?lang=en&command=all-associations" which are poor seo)

So, as explained in my first email, all arguments to my application 
controller are in $_SERVER["PATH_INFO"] (and not 
$_SERVER["QUERY_STRING"]). And that did work like a charm with 
mod_php... Changing all my application with data in query_string is not 
very complicated if I wrote a good program ( :) ) but will need a lot of 
checks.

Actually at the point where I am now, i've already spent some time on it...

>
> It should be stated that mod_php and mod_fcgid populate these values in
> different ways. From what I understand, PATH_INFO is less reliable and
> less well-implemented than QUERY_STRING. Fundamentally, this is why you
> are observing different behavior/values here after moving from mod_php
> to mod_fcgid.

I'm not sure that this is a problem with the PATH_INFO variable since 
the error occurs even before php has any chance to start executing (the 
test.php is not executed at all in test1)

>> RewriteRule ^test3/(.*) ./test.php?/$1
>> # = parameters are in query_string instead of path_info
>
> Same as above.
>
>> RewriteRule ^test4/(.*) http://www.perspectives-musicales.org/test.php/$1
>> # = redirection 302
>
> I don't see a 302 response for this one. I see the same 404 and message
> as above. Maybe you changed something after sending this message.

I use firefox http live header and it shows a status code 302 ("HTTP/1.1 
302 Found") then the browser redirect to the page as if it was another 
website
I still think that [apache or mod_fcgid] cannot execute test.php in 
test1 just because it thinks it is a directory and cannot find it.


>
>> RewriteRule ^test5/(.*) test.php/$1
>> # = error 404
>>
>> RewriteRule ^test6/(.*) /test.php/$1
>> # = error 404
>
> Same as the others with 404 responses.
>
>>
>>
>> Thanks for your help.
>
> You're welcome. I'll wait to hear back before offering additional
> information.
>
> -Ben
>
>>
>>
>> On 12/02/13 19:40, Ben Johnson wrote:
>>>
>>>
>>> On 2/12/2013 10:59 AM, Riccardo Cohen wrote:
>>>> Thanks Ben, here are the answers :
>>>>
>>>>> 1.) Where have you defined the rewrite rule? In a .htaccess file?
>>>>
>>>> in .htaccess
>>>>
>>>>> 2.) Have you defined a RewriteBase? If so, what is it?
>>>>
>>>> no change with or without
>>>>
>>>>> 3.) Have you reviewed Apache's access log at all?
>>>>
>>>> I'll have a look now
>>>>
>>>>> 4.) Have you increased RewriteLogLevel to, say, 4, to see exactly what
>>>>> the mod_rewrite engine is doing?
>>>>
>>>> I'll try that. Is it possible to set it in .htacces or must I change
>>>> global apache configuration (I only have access to my .htaccess in this
>>>> hosting).
>>>
>>> Unfortunately, RewriteLogLevel can be set in the "server config" and
>>> "virtual host" contexts only. (You can make this type of determination
>>> in the future by visiting the manual page and looking for the "context"
>>> value:
>>> http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteloglevel .)
>>>
>>> This is one of many reasons for which hosting on a VPS over which you
>>> have complete control is beneficial.
>>>
>>> In any case, we'll have to proceed without access to the rewrite log.
>>>
>>> Is there a specific reason for which you're using "./index.php" in the
>>> right-hand side of the rule? I'm referring to the period ("."), in
>>> particular. This may well be the source of the problem. It could be that
>>> mod_php interprets that relative path (./index.php) "correctly", whereas
>>> mod_fcgid does not.
>>>
>>> Try this:
>>>
>>> RewriteRule ^en/(.*) index.php/en/$1
>>>
>>> -Ben
>>>
>>>
>>>
>>>> Thanks
>>>>
>>>> On 12/02/13 14:53, Ben Johnson wrote:
>>>>>
>>>>>
>>>>> On 2/12/2013 2:16 AM, Riccardo Cohen wrote:
>>>>>> Hello
>>>>>> I received some clues from this list members, thanks for that. But
>>>>>> unfortunately my problem is not solved.
>>>>>>
>>>>>> It's not that I want others to focus on me, but I'm quite sure that
>>>>>> there is a real problem (if not why would it work perfectly on mod_php
>>>>>> ?), I could not find any solution googling about it (even with the
>>>>>> help
>>>>>> of the host technical team), and I would like a confirmation that
1)
>>>>>> it's not an error from my understanding, and 2) there is no workaround
>>>>>> for it.
>>>>>
>>>>> I doubt it is a problem with the software. mod_rewrite has been put
>>>>> through the paces over the years and I'd be shocked if a bug were
>>>>> uncovered given your rule's relative simplicity.
>>>>>
>>>>> Before digesting your post in its entirety, I have a couple of
>>>>> questions
>>>>> first.
>>>>>
>>>>> 1.) Where have you defined the rewrite rule? In a .htaccess file?
>>>>>
>>>>> 2.) Have you defined a RewriteBase? If so, what is it?
>>>>>
>>>>> 3.) Have you reviewed Apache's access log at all?
>>>>>
>>>>> 4.) Have you increased RewriteLogLevel to, say, 4, to see exactly what
>>>>> the mod_rewrite engine is doing?
>>>>>
>>>>> -Ben
>>>>>
>>>>>
>>>>>
>>>>>> So I'll be very pleased to here from some qualified developer before
I
>>>>>> spend 2 days to modify and retest all my application.
>>>>>>
>>>>>> Thanks in advance.
>>>>>>
>>>>>> On 07/02/13 11:17, Riccardo Cohen wrote:
>>>>>>> Sorry to insist but I'm really blocked and I really need help.
>>>>>>> Here is a small summary for those who don't want to read all
:
>>>>>>>
>>>>>>> I want to make a rewrite from :
>>>>>>>
>>>>>>> http://www.perspectives-musicales.org/en/all-albums
>>>>>>> to
>>>>>>> http://www.perspectives-musicales.org/index.php/en/all-albums
>>>>>>>
>>>>>>> my rewrite rule is
>>>>>>>
>>>>>>> RewriteRule ^en/(.*) ./index.php/en/$1
>>>>>>>
>>>>>>> This works when apache is runnnig with mod_php, but not when
running
>>>>>>> mod_fcgid (php as cgi). In cgi mode I have a 404 error.
>>>>>>>
>>>>>>> The Apache version is 2.2.23 and mod_fcgid is version 2.3.7 with
>>>>>>> configuration flag cgi.fix_pathinfo=1
>>>>>>>
>>>>>>> Thanks for your help.
>>>>>>>
>>>>>>>
>>>>>>> On 05/02/13 21:32, Riccardo Cohen wrote:
>>>>>>>> Hello
>>>>>>>> I'm new to apache mailing list, sorry if I'm not 100% clear,
and
>>>>>>>> sorry
>>>>>>>> for this long description.
>>>>>>>>
>>>>>>>> I have developped a website with php/mysql :
>>>>>>>> http://www.perspectives-musicales.org and placed it on a
good
>>>>>>>> hosting
>>>>>>>> service (web4all.fr).
>>>>>>>> To improve search engine rank I decided to set all urls to
>>>>>>>> /index.php/... and rewrite them to avoid having index.php
in url
>>>>>>>> (sort
>>>>>>>> of MVC technique combined with SEO...)
>>>>>>>>
>>>>>>>> Example : the catalog is at url :
>>>>>>>> http://www.perspectives-musicales.org/en/all-albums
>>>>>>>> This should be transparantly mapped to
>>>>>>>> http://www.perspectives-musicales.org/index.php/en/all-albums
>>>>>>>> thanks to
>>>>>>>> the rewrite rule :
>>>>>>>>
>>>>>>>> RewriteRule ^en/(.*) ./index.php/en/$1
>>>>>>>>
>>>>>>>> My application uses then $_SERVER["PATH_INFO"] (and not
>>>>>>>> $_SERVER["QUERY_STRING"]) to retreive url information. This
worked
>>>>>>>> perfectly until last month, because web4all.fr changed the
whole
>>>>>>>> system
>>>>>>>> and separated apache from php, using fast cgi instead of
mod_php.
>>>>>>>>
>>>>>>>> The system is supposed to be more reliable and more efficient
like
>>>>>>>> this,
>>>>>>>> and apparently is. But the rewrite rule does not work anymore.
So I
>>>>>>>> investigated and made some test :
>>>>>>>>
>>>>>>>> I have a small test.php that displays the path_info and
>>>>>>>> query_string.
>>>>>>>> You can presently test it here :
>>>>>>>>
>>>>>>>> http://perspectives-musicales.org/test1/a/b/c
>>>>>>>> http://perspectives-musicales.org/test2/a/b/c
>>>>>>>> http://perspectives-musicales.org/test3/a/b/c
>>>>>>>> http://perspectives-musicales.org/test4/a/b/c
>>>>>>>>
>>>>>>>> and I set the following rules :
>>>>>>>>
>>>>>>>> RewriteRule ^test1/(.*) ./test.php/$1
>>>>>>>> RewriteRule ^test2/(.*) ./test.php?$1
>>>>>>>> RewriteRule ^test3/(.*) ./test.php?/$1
>>>>>>>> RewriteRule ^test4/(.*)
>>>>>>>> http://www.perspectives-musicales.org/test.php/$1
>>>>>>>>
>>>>>>>> None of these 4 rewrite rules are convenient. Here is why
:
>>>>>>>>
>>>>>>>> - test1 : the system anwsers 404 "No input file specified".
I think
>>>>>>>> (not
>>>>>>>> sure) that Apache beleives that test.php is a folder, and
cannot
>>>>>>>> find it
>>>>>>>> so answers 404
>>>>>>>>
>>>>>>>> - test2 : the rewrite rule works, but of course the url
>>>>>>>> information is
>>>>>>>> no more in path_info, it is in query_string as shown in the
page
>>>>>>>> content
>>>>>>>>
>>>>>>>> - test3 : same as test2
>>>>>>>>
>>>>>>>> - test4 : almost good, I can have the url info in path_info,
but
>>>>>>>> apache
>>>>>>>> begins first with a 302 redirection and then changes the
url to
>>>>>>>> http://www.perspectives-musicales.org/test.php/a/b/c, which
>>>>>>>> looses all
>>>>>>>> search engine efficiency (and also eventual POST variables
if any).
>>>>>>>>
>>>>>>>> My host tried several searches on forums including this one,
and
>>>>>>>> could
>>>>>>>> not find any answer. It seems to be an apache bug, but not
sure, I
>>>>>>>> have
>>>>>>>> no bug number to give anyway. If it is a bug, it is demontrated
by
>>>>>>>> test1
>>>>>>>> I think.
>>>>>>>>
>>>>>>>> So here is my question : Is there any way to make this rewrite
rule
>>>>>>>> work
>>>>>>>> in fastcgi mode, and what is the syntax for it, to keep info
in
>>>>>>>> path_info without 302 redirection. The Apache version is
2.2.23  and
>>>>>>>> mod_fcgid is version 2.3.7 with configuration flag
>>>>>>>> cgi.fix_pathinfo=1
>>>>>>>>
>>>>>>>> If there is a way, thanks for your help I'd be glad to test
it.
>>>>>>>> If no
>>>>>>>> could you explain why and how to solve it. As workaround
we used
>>>>>>>> test4
>>>>>>>> syntax in the whole site, to make it work, but it is bad
for search
>>>>>>>> engine, and creates problem in backoffice (because certain
>>>>>>>> backoffice
>>>>>>>> functions use POST variables)
>>>>>>>>
>>>>>>>> I know I can change my code to use query_string everywhere
>>>>>>>> instead of
>>>>>>>> path_info, but if I can avoid changing and testing all my
>>>>>>>> websites it
>>>>>>>> would be really great
>>>>>>>>
>>>>>>>> Thanks a lot for your anwser.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
>>>>> For additional commands, e-mail: users-help@httpd.apache.org
>>>>>
>>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
>>> For additional commands, e-mail: users-help@httpd.apache.org
>>>
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
> For additional commands, e-mail: users-help@httpd.apache.org
>
>

-- 
Riccardo Cohen
+33 (0)6 09 83 64 49
Société Realty-Property.com
1 rue de la Monnaie
37000 Tours
France

<http://www.appartement-maison.fr>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Mime
View raw message