Afftamat
Afftamat

Reputation: 43

.htaccess RewriteRule returns a blank page

I'm trying to solve this for more than two hours now. I have a personal site which uses .htaccess to manage urls. It looks like this:

RewriteEngine on
RewriteBase /
...
RewriteRule ^sklad/?$ index.php?action=sklad
RewriteRule ^sklad/user/([0-9]+)?$ index.php?action=sklad&user=$1
RewriteRule ^sklad/folder/(.+)?$ index.php?action=sklad&folder=$1
RewriteRule ^sklad/file/(.+)?$ engine/ajax/sklad.php?file=$1
RewriteRule ^sklad/logout/?$ index.php?action=sklad&op=logout
...
RewriteRule ^admin/?$ admin.php
RewriteRule ^admin/news/?$ admin.php?action=news

the first five ones work fine. The admin/ one works fine. But when I try to access admin/news/, I get a blank page. No errors displayed or logged by Apache, and no output. admin.php?action=news is working fine.

Both sklad/ and admin/ folders physically exist on the server. BUT when I rename the admin/ folder to something else OR change the the last RewriteRule to something like

RewriteRule ^admin123/news/?$ admin.php?action=news

I can access admin123/news/. If it has something to do with the actual folder existing on the server, then why the first five rules are working? This doesn't make sense.

I'm out of ideas, hope someone here helps...

Upvotes: 4

Views: 5019

Answers (2)

Jon Lin
Jon Lin

Reputation: 143896

Yes, it's called news.php... I renamed the file and exerything is fine now, thanks! Didn't know about this, pretty unobvious bug (or not?)

It's not a bug, it sounds like content negotiation (via mod_negotiation) is turned on and it's doing something you don't want. Negotiation can be turned on via a type map or the MultiViews option. Typemaps are a little explicit to setup, so I'm assuming since you don't know why this is happening, you haven't set of a specific type that maps to news.php. So you've probably got Multiviews turned on. You can turn it off by either removing it from an Options statement:

#  remove this word -----------v
Options Indexes FollowSymLinks Multiviews

This could be anywhere, in your htaccess, server config, vhost config, some config include file, etc. So you can also explicitly unset it in your htaccess file (as long as you aren't also explicitly setting it in the same file):

Options -Multiviews

Upvotes: 2

user1149244
user1149244

Reputation: 755

I am not to good with htaccess and RegExp but i think admin/news will fall into your first htaccess rule.

   RewriteRule ^admin/?$ admin.php

It wont proceed on your second rule on admin which is:

   RewriteRule ^admin/news/?$ admin.php?action=news

Its the same problem I was facing before.

Try to modify your admin.php, echo/print something when there is no params pass. Something like this:

   if($_GET['action'])
   {
        echo 'With Parameters';
   }
   else
   {
       echo 'No Parameters pass';
   }

Debugged it that way.

Upvotes: 0

Related Questions