2013-07-09 141 views
0

我正在尋找一個「.htaccess」文件解決方案來重寫以「./index.html」結尾的請求地址和「./index」僅限於站點根或子文件夾,例如「http://www.mydomain.com/index[.html]」,直至「http://www.mydomain.com/」。我發現了一些關於「index.html」問題的幫助,但是我很難使解決方案適用於「./index」的唯一請求。我使用下面的代碼與我在嘗試「./index"-only片註釋:.htaccess - 隱藏根目錄和目錄中的「/index.html」和「/ index」

# 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服務器的版本,但任何援助將不勝感激。謝謝。

+0

第一個'RewriteRule'以及條件對我來說工作正常。你遇到的問題究竟是什麼? –

+0

感謝您的檢查。我試圖在第一次重寫下面的double#後面得到註釋代碼,以匹配「/ index」和可能的「/index.html」條件,並重寫URL第一次重寫。否則,如果我只是得到「/ index」條件來匹配並重寫爲「/」,我不會介意有兩個重寫條件,但我不能得到任何我試圖處理「/ index 「條件,根本。 –

回答

1

我已經設法回答我自己的問題,在此頁上出現的鏈接幫助,發佈後,結合偏離中心的網頁搜索一個特定的定義。以下是兩個鏈接:StackOverflow - Apache .htaccess to redirect index.html to root,...Media Temple Support/Knowledgebase - Using .htaccess rewrite rules - .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} ^.*\/index.*\ HTTP/ 
RewriteRule ^(.*)index.*$ "/$1" [R=301,L] 

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

但我不知道爲什麼你可以這樣做,因爲後者工作得很好,文本較少。也許我想念一些東西 - 但如果它沒有壞掉,不要修復它。

我還沒有能夠確定原來的第一次重寫/條件是從哪裏來的,但它是按照它的設計目的進行的,儘管我正在尋找一些與衆不同的東西。我希望這些亂碼對於那些尋求這種解決方案的人來說是有意義的。感謝「Jon Lin」和「Bip」作出迴應以幫助他們,但是,在搜索和重新搜索幾小時的時候,意外地發現了這一點。現在我的網站像其他網站一樣運行。多謝你們!

+0

我應該補充一點,「索引」重定向部分的最終版本也適用於「index.php」,或者任何其他「索引[.whatever]」請求,如果乍一看並不明顯。 –

0

檢查它here我認爲,它是你的問題。 你也可以檢查this

+0

這個答案對我來說並不清楚,因爲提供的這兩個鏈接都提到Windows服務器操作系統上的IIS配置,而不是Linux服務器上的htaccess配置。不知道你打算在這裏。 –