Description of problem: url(-relative) no longer returns the original relative path before rewrites. This used to work in FC4. Version-Release number of selected component (if applicable): perl-5.8.8-4 How reproducible: 100% Steps to Reproduce: 1. Set up a redirect in your .htaccess file such as: RewriteEngine On RewriteBase / RewriteRule ^testabc.cgi$ test.cgi 2. Create a test perl script, test.cgi such as: #!/usr/bin/perl use CGI qw/:standard -no_xhtml/; print "Content-type: text/plain\n\n"; print url(-relative=>1), "\n"; print url(-absolute=>1), "\n"; 3. Look at the web page /testabc.cgi Actual results: test.cgi /testabc.cgi Expected results: testabc.cgi /testabc.cgi Additional info:
Hmmm, this does not seem to be a problem with perl's CGI:: module - I put your rewrite rule in /etc/httpd/conf/httpd.conf's /var/www/cgi-bin/ 'Directory' entry, from the standard config from a clean install of httpd-2.2.0-6 , so it now reads: --- <Directory "/var/www/cgi-bin"> AllowOverride None Options FollowSymLinks Order allow,deny Allow from all RewriteEngine On RewriteBase /cgi-bin RewriteRule ^testabc.cgi$ test.cgi </Directory> --- NOTE: before the server would process the rewrite rule, it insisted that the FollowSymLinks or FollowSymLinks owner option be specified - without one of these options enabled, rewrite rules will be ignored. Then your example test.cgi script works as expected, producing the output: testabc.cgi /testabc.cgi Perhaps your http server is not loading your .htaccess file correctly / doesn't allow the FollowSymLinks or RewriteRule options ? I'm CC-ing the httpd maintainer on this - perhaps he could shed some light on why the rewrite rule might not be taking effect. If the rewrite rule is correctly applied, the perl CGI module seems to have no problem with url(-relative=>1) / url(-absolute=>1) .
Sorry - my mistake - I was looking at the wrong output - it does produce : test.cgi /testabc.cgi. This is a CPAN CGI module bug: http://rt.cpan.org/Public/Bug/Display.html?id=18500 I'll try out the patch from the above bug (now in CGI 3.17) and see if it fixes the problem - if so, it can go into the next perl-5.8.8-6+ release.
OK, I now see the problem - CGI.pm-3.15 has a new "-rewrite" sub url() parameter, which, if 0, is meant to make url() return the "$SCRIPT_NAME", not the "$REQUEST_URI". It seems the programmer applies this logic only in the case of '-absolute=>1', NOT '-relative=>1'. Yes, this seems like a bug to me - and is still in the latest 3.17 version. Please try out the attached CGI.pm which fixes the problem - if it works OK, I'll submit it with the next perl-5.8.8-6 version.
Created attachment 127678 [details] CGI.pm (3.15) fixed to use rewritten REQUEST_URI in url() if rewrite!=0
Sorry, should have mentioned: copy the above CGI.pm attachment to /usr/lib/perl5/5.8.8/CGI.pm to test.
I tried this out and it looks like it is working. Thanks.
Thanks for the testing. The fix is now checked into CVS and will go into the next perl-5.8.8-6 release. Upstream CPAN CGI.pm bug raised: [rt.cpan.org #18692] http://rt.cpan.org/Ticket/Display.html?id=18692
perl-5.8.8-5 has been pushed for fc5, which should resolve this issue. If these problems are still present in this version, then please make note of it in this bug report.
assigning to rnorwood