Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

htaccess rewrite trouble

I'm completely stuck with htaccess rewrites not working on my server. It's a basic index.php rewrite for Codeigniter, and works fine when developing on my Mac but fails on my server (CentOS, Apache 2, WHM)

RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Attempting to load /about/ will display the index.php page. /index.php/about will display the correct page. I've tried every combination of options I can think of to no avail. A sample of my rewrite.log is below.

[dev.tirius.co.uk/sid#5d65288][rid#5e37c00/initial] (3) [per-dir /home/tirius/subdomains/dev/public_html/] add path info postfix: /home/tirius/subdomains/dev/public_html/about -> /home/tirius/subdomains/dev/public_html/about/
[dev.tirius.co.uk/sid#5d65288][rid#5e37c00/initial] (3) [per-dir /home/tirius/subdomains/dev/public_html/] strip per-dir prefix: /home/tirius/subdomains/dev/public_html/about/ -> about/
[dev.tirius.co.uk/sid#5d65288][rid#5e37c00/initial] (3) [per-dir /home/tirius/subdomains/dev/public_html/] applying pattern '^(.*)$' to uri 'about/'
[dev.tirius.co.uk/sid#5d65288][rid#5e37c00/initial] (2) [per-dir /home/tirius/subdomains/dev/public_html/] rewrite about/ -> /index.php/about/
[dev.tirius.co.uk/sid#5d65288][rid#5e37c00/initial] (1) [per-dir /home/tirius/subdomains/dev/public_html/] internal redirect with /index.php/about/ [INTERNAL REDIRECT]
[dev.tirius.co.uk/sid#5d65288][rid#5e3f7c8/initial/redir#1] (3) [per-dir /home/tirius/subdomains/dev/public_html/] add path info postfix: /home/tirius/subdomains/dev/public_html/index.php -> /home/tirius/subdomains/dev/public_html/index.php/about/
[dev.tirius.co.uk/sid#5d65288][rid#5e3f7c8/initial/redir#1] (3) [per-dir /home/tirius/subdomains/dev/public_html/] strip per-dir prefix: /home/tirius/subdomains/dev/public_html/index.php/about/ -> index.php/about/
[dev.tirius.co.uk/sid#5d65288][rid#5e3f7c8/initial/redir#1] (3) [per-dir /home/tirius/subdomains/dev/public_html/] applying pattern '^(.*)$' to uri 'index.php/about/'
[dev.tirius.co.uk/sid#5d65288][rid#5e3f7c8/initial/redir#1] (1) [per-dir /home/tirius/subdomains/dev/public_html/] pass through /home/tirius/subdomains/dev/public_html/index.php

As you can see, the htaccess is picked up and mod_rewrite is enabled and working, but nothing seems to be being appended to index.php

This must be an Apache configuration issue but I'm really lost as to what it could be.

Sample from httpd.conf

<Directory "/">
    Options ExecCGI FollowSymLinks IncludesNOEXEC Indexes MultiViews SymLinksIfOwnerMatch
    AllowOverride All
</Directory>
like image 862
tombeynon Avatar asked Nov 19 '25 23:11

tombeynon


1 Answers

This is my .htaccess on CentOS:

RewriteCond $1 !^(index\.php|images|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ index.php?/$1 [L]

Note the question-mark before the forward-slash.

I think the reason for this relates to running PHP as FastCGI. I believe the questionmark makes the preceding character optional (i.e. it would also match index.ph). I've tried researching this a bit more but couldn't find a definitive reason. I think I just tried every variation on the rewriterule I could find when I was looking and didn't bother asking why it worked.

Glad to be of help.

like image 68
PaulSkinner Avatar answered Nov 21 '25 19:11

PaulSkinner



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!