简体   繁体   English

301将index.html重定向到/或/index.php

[英]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. 我刚刚将一个网站从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. 下面是我当前.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/ 我有一堆指向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

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

I guess you have your directory index set to index.html, and it occurs before index.php. 我猜你的目录索引设置为index.html,它发生在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. 然后您的http://www.foo.com/被解释为http://www.foo.com/index.html ,它被重定向到http://www.foo.com/ - 因此循环。

Here you got some info about redirects the diffrent ways. 在这里,您获得了有关重定向不同方式的一些信息。

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 "/"

I agree with Kender's comment about the redirect loop. 我同意Kender关于重定向循环的评论。 Possibly the way round that is to have 可能是这样的方式

DirectoryIndex notindex.html DirectoryIndex notindex.html

along with your redirects, then put the actual front page in notindex.html. 与您的重定向一起,然后将实际的首页放在notindex.html中。 I'm not clear what's wrong with people using /index.html if that page really exists? 如果该页面确实存在,我不清楚使用/index.html的人有什么问题?

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中有多少个目录)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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