Я сильно подозреваю, что это происходит из-за AcceptPathInfo, который, на мой взгляд, является ошибкой Apache. По умолчанию я считаю, что он включен, где PHP является обработчиком.
Попробуйте добавить в свой .htaccess или, предпочтительно, свой httpd.conf (и перезапустите):
AcceptPathInfo Off
См .: http://httpd.apache.org/docs/2.2/mod/core.html#acceptpathinfo
-
Несколько побочных моментов:
Вы должны убедиться, что ваши RewriteRules всегда заканчиваются на [L], когда вы нашли совпадение - это поможет в отладке. E.g.:
RewriteRule ^/media/?$ index.php?id=media [L]
Кроме того, вы можете уменьшить количество правил, комбинируя похожие; e.g.:
RewriteRule ^/(media|resources)/?$ index.php?id=$1 [L]
Лично я считаю использование /? в конце вашей первой половины это не хорошо, потому что это означает, что оба URL работают без перенаправления, а это означает, что у вас нет окончательного, который является «правильным». Лично я бы использовал:
RewriteRule ^/(media|resources)/$ index.php?id=$1 [L]
RewriteRule ^/(media|resources)$ /$1/ [L,R]
Другими словами, уникальный ресурс должен иметь один, канонический (окончательный) URL.