0

「./index.html」と「./index」の両方で終わる要求されたアドレスを、「http://www. mydomain.com/index[.html]" から " http://www.mydomain.com/ " だけに。「index.html」の問題に関するヘルプを見つけましたが、「./index」のみのリクエストに対してソリューションを機能させるのに苦労しています。「./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サーバーのバージョンはわかりませんが、どんな支援も大歓迎です. ありがとう。

4

2 に答える 2

2

私は、投稿後にこのページに表示されたリンクと、特定の定義の中心から外れた Web 検索を組み合わせて、自分の質問に答えることができました。StackOverflow - index.html をルートにリダイレクトするための Apache .htaccessと、Media Temple Support/Knowledgebase - Using .htaccess rewrite rules - .htaccessの 2 つのリンクがあります。新しいコードは次のようになります。

## 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 に答える