Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
818 views
in Technique[技术] by (71.8m points)

.htaccess - Redirect *.php to clean URL

My htaccess doesn't quite work:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*).php$ /blah/$1 [R=301,L]
RewriteRule ^(.*)$ /blah/index.php/$1 [L]

Basically /blah/about.php should redirect to /blah/about

I'm using codeigniter so the last line is required to process URL's.

The redirect works fine but I get an internal server error in /blah/about

** Edit - error log:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I think you just need to change your last line to be:

RewriteRule ^(.*)$ /blah/index.php?/$1 [L]

I have no specific experience with CodeIgniter but generally frameworks want to push all requests through a central controller (index.php) and then parse the request's URL from within there.

EDIT: Just updated my answer with the example from here: http://codeigniter.com/wiki/mod_rewrite/, that should be how CodeIgniter wants it.

UPDATE: You should probably duplicate your RewriteConds for the second RewriteRule, they only apply to the first:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*).php$ /blah/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blah/index.php/$1 [L]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...