0

我正在寻找一种“.htaccess”文件解决方案,以将请求的以“./index.html”和“./index”结尾的地址重写为仅站点根目录或子文件夹,例如“http://www. mydomain.com/index[.html]" 降到只有 " http://www.mydomain.com/ "。我在“index.html”问题上找到了一些帮助,但我很难使解决方案适用于“./index”-only 请求。我正在使用以下代码尝试注释掉“./index”-only 部分:

# MOD_REWRITE IN USE
Options +FollowSymlinks
RewriteEngine On
RewriteBase /

# Redirect "index" page requests to either root or directory

# These first two lines work for "./index.html"...
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://%{HTTP_HOST}/ [R=301,L]

## These three lines don't work, last two are alternates of one another...
##  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index*\ HTTP/
##  RewriteRule ^index*$ http://%{HTTP_HOST}/ [R=302,L]
##  RewriteRule ^index*$ $1 [R=302,L]

# Hide .html extension - additional information

# To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R=301,L]

# To internally forward /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*?)/?$ $1.html [L]

(如前所述,后一部分用于隐藏“.html”结尾,可能是多余的,但我按原样包含了整个脚本。)我不知道 Apache 服务器的版本,但任何帮助将不胜感激. 谢谢。

4

2 回答 2

2

我已经设法在此页面上出现的链接的帮助下回答了我自己的问题,发布后,结合对特定定义的偏心网络搜索。以下是两个链接:StackOverflow - Apache .htaccess 将 index.html 重定向到 root,...Media Temple Support/Knowledgebase - 使用 .htaccess 重写规则 - .htaccess。新代码如下所示:

## MOD_REWRITE in use ##

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

## Redirect index page requests to either root or directory ##

RewriteCond %{THE_REQUEST} ^.*\/index.*\ HTTP/
RewriteRule ^(.*)index.*$ "/$1" [R=301,L]

## Hide .html extension ##

## To externally redirect /dir/foo.html to /dir/foo...

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R=301,L]

## To internally forward /dir/foo to /dir/foo.html...

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

新的第一个重写/条件可以修改为看起来更像原来的第一个,通过替换

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index.*\ HTTP/
RewriteRule ^index.*$ http://%{HTTP_HOST}/ [R=301,L]

代替

RewriteCond %{THE_REQUEST} ^.*\/index.*\ HTTP/
RewriteRule ^(.*)index.*$ "/$1" [R=301,L]

但我不知道你为什么会这样做,因为后者工作得很好,文字更少。也许我错过了一些东西——但如果它没有坏,就不要修理它。

我还不能确定最初的第一次重写/条件来自哪里,但它确实符合它的设计目的,尽管我正在寻找一些不同的东西。我希望所有这些胡言乱语对那些寻找这种解决方案的人来说都是有意义的。感谢“Jon Lin”和“Bip”为提供帮助而做出的回应,但是当数小时的搜索和重新搜索得到回报时,这也很好,出乎意料。现在我的网站和其他网站一样正常运行。多谢你们!

于 2013-07-10T05:01:53.797 回答
0

在这里检查一下,我想,这是你的问题。你也可以检查这个

于 2013-07-09T08:09:02.743 回答