简体   繁体   中英

301 redirect index.html to / or /index.php

Greetings,

I have just moved a website from IIS to Apache and am having a little trouble redirecting the index file without causing an infinite loop.

Both of these individually will cause a loop-

Redirect 301 /index.htm /index.php

Redirect 301 /index.htm http://www.foo.com/

Below is a copy of my current .htaccess. Can someone help me? I have a bunch of links pointed to http://www.foo.com/index.htm that I would like to 301 redirect to http://www.foo.com/

RewriteEngine On

########## Begin - Rewrite rules to block out some common exploits
## If you experience problems on your site block out the operations listed below
## This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End - Rewrite rules to block out some common exploits

#  Uncomment following line if your webserver's URL
#  is not directly related to physical file paths.
#  Update Your Joomla! Directory (just / for root)

# RewriteBase /

########## Begin - Joomla! core SEF Section
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|\.cfm|/[^.]*)$  [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
########## End - Joomla! core SEF Section

Redirect 301 /a /administrator

Why are you doing this? Why not add index.php to your vhost/config as a valid index extension

DirectoryIndex index.html index.php

And then delete the HTML file>

or

DirectoryIndex index.php

I guess you have your directory index set to index.html, and it occurs before index.php. Then your http://www.foo.com/ is interpreted as http://www.foo.com/index.html , and it is redirected to http://www.foo.com/ - hence the loop.

Here you got some info about redirects the diffrent ways.

You would need to check the value of REQUEST_URI like this:

RewriteCond %{REQUEST_URI} ^/index.htm$     # If REQUEST_URI == "/index.htm"
RewriteRule (.*) / [R=301,L]                # Then 301 redirect to "/"

I agree with Kender's comment about the redirect loop. Possibly the way round that is to have

DirectoryIndex notindex.html

along with your redirects, then put the actual front page in notindex.html. I'm not clear what's wrong with people using /index.html if that page really exists?

I'm not allowed to add hyperlinks yet, as I'm a new user, so when I've typed "foo" just assume thats the entire URL...

To redirect foo/index.php to foo/ without the loop, use another rewrite rule:

RewriteRule index.php foo/ [R=301]

You might need to use /index.php depending on what your RewriteBase is set as (and how many directories you have an index.php in).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM