apache 301 将 index.html 重定向到 / 或 /index.php
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/877736/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
301 redirect index.html to / or /index.php
提问by Marty
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.
我刚刚将一个网站从 IIS 移到了 Apache,并且在重定向索引文件而不会导致无限循环时遇到了一些麻烦。
Both of these individually will cause a loop-
这两个单独会导致循环 -
Redirect 301 /index.htm /index.php
重定向 301 /index.htm /index.php
Redirect 301 /index.htm http://www.foo.com/
重定向 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.htmthat I would like to 301 redirect to http://www.foo.com/
下面是我当前 .htaccess 的副本。有人能帮我吗?我有一堆指向http://www.foo.com/index.htm的链接,我想 301 重定向到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
回答by Aiden Bell
Why are you doing this? Why not add index.php to your vhost/config as a valid index extension
你为什么做这个?为什么不将 index.php 添加到您的 vhost/config 作为有效的索引扩展名
DirectoryIndex index.html index.php
And then delete the HTML file>
然后删除HTML文件>
or
或者
DirectoryIndex index.php
回答by kender
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.
我猜你的目录索引设置为 index.html,它出现在 index.php 之前。然后你的http://www.foo.com/被解释为http://www.foo.com/index.html,它被重定向到http://www.foo.com/- 因此循环。
Hereyou got some info about redirects the diffrent ways.
在这里,您获得了一些有关以不同方式重定向的信息。
回答by WNRosenberg
You would need to check the value of REQUEST_URI like this:
您需要像这样检查 REQUEST_URI 的值:
RewriteCond %{REQUEST_URI} ^/index.htm$ # If REQUEST_URI == "/index.htm"
RewriteRule (.*) / [R=301,L] # Then 301 redirect to "/"
回答by pjc50
I agree with Kender's comment about the redirect loop. Possibly the way round that is to have
我同意 Kender 关于重定向循环的评论。可能的方式是有
DirectoryIndex notindex.html
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?
连同您的重定向,然后将实际首页放在 notindex.html 中。如果该页面确实存在,我不清楚人们使用 /index.html 有什么问题?
回答by Dan
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...
我还不允许添加超链接,因为我是新用户,所以当我输入“foo”时,只需假设这是整个 URL...
To redirect foo/index.php to foo/ without the loop, use another rewrite rule:
要在没有循环的情况下将 foo/index.php 重定向到 foo/,请使用另一个重写规则:
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).
您可能需要使用 /index.php 取决于您的 RewriteBase 设置为什么(以及您有多少个 index.php 目录)。

