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 404I 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_infoWhy is this a problem?
My whole web application is developped with urls like http://www.perspectives-musicales.org/en/all-associationsfor 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_infoSame as above.RewriteRule ^test4/(.*) http://www.perspectives-musicales.org/test.php/$1 # = redirection 302I 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 404Same as the others with 404 responses.Thanks for your help.You're welcome. I'll wait to hear back before offering additional information. -BenOn 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 .htaccess2.) Have you defined a RewriteBase? If so, what is it?no change with or without3.) Have you reviewed Apache's access log at all?I'll have a look now4.) 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 -BenThanks 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? -BenSo 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@xxxxxxxxxxxxxxxx For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx--------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx--------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx
-- 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@xxxxxxxxxxxxxxxx For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx