As to your internal rewrites, I see one potentially fatal problem.
Your first rule,
"^/([^/]+)/?$", matches all requests that start with a "/", that include an undetermined amount of non "/" characters, and that may or may not end in "/"... That'll match pretty much everything, including
"/index.php?c=xxx&p=yyy".
This will most likely leave you in an indefinite loop, eventually causing Apache to break out with a 500 code. (A match causes an internal redirect, which is then process again as a new request and subsequently passed through mod_rewrite again.)
Also, I'm not entirly sure you should be including the "/" char at the beginning of the regular expression. Apache may strip it from the request URL. (Not 100% sure though.)
Try something like this instead:
- RewriteRule ^([^/]+)/?([^/]+)?/? index.php?c=$1&p=$2 [L,QSA]
(Note, this one replaced both of your internal requests. The second option is made optional by the ? char.)
P.S.
If you need to specify some specific directory before the "index.php", you may want to try the RewriteBase instead.
- RewriteBase http://example.com/some/dir/
-
RewriteRule ^([^/]+)/?([^/]+)?/? index.php?c=$1&p=$2 [L,QSA]
There the
index.php in the RewriteRule is rewritten as
http://example.com/some/dir/index.php?c=xxx&p=yyy