4

この質問が以前に尋ねられたことは知っていますが、.html 拡張子を非表示にする良い方法を知っている人はいますか? https://stackoverflow.com/から多くのコードと多くの回答を試しましたが、結果が表示されません。Thats y もう一度お願いします

私は静的な Web サイトを持っていて、拡張機能を削除して URL をクリーンアップしたいと考えていました。私は静的なhtmlファイルを扱っていました。

拡張機能を削除する前は、URL はwebsite.com/about.html.

拡張子を削除すると、website.com/about のようになります。それが明らかだったことを願っています。

.htaccess ファイルがあり、多くのコードを試しましたが、うまくいきません。ここにいくつかのコードがあります

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 



RewriteCond %{THE_REQUEST} \ /(.+/)?index(\.html)?(\?.*)?\  [NC]
RewriteRule ^(.+/)?index(\.html)?$ /%1 [R=301,L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.html$ /$1 [R=301,L]

RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L]



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



RewriteEngine On
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ $1.html [NC,L]



RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html


RewriteBase /
RewriteEngine on
RewriteRule ^(.*)\.htm$ $1.html [nc]


RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]

しかし、私は何の結果も見ていません...:(

4

4 に答える 4

3

ルールを逆にします(最初のルールは別の方法で機能します):

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

元のルールはRewriteRule ^(.*)\.html$ $1 [L]、「要求されたリソース名がで終わる場合は.html、ブラウザにリダイレクトを発行して、HTMLなしで同じ名前のものがあるかどうかを尋ねる」というものでした。.htmlこれにより、404になります(Apacheにはリソースが少ないために役立つものがないため)。

.html宛先に切り替えるRewriteRule ^(.*)$ $1.html [L]ことで、ルールを変更して、「要求されたリソース名がディスク上のファイルまたはディレクトリでない場合は、要求が終了したかのように(内部的にはブラウザに通知しないで)要求を再ルーティングしてみてください.html」 。

于 2012-12-13T08:11:49.533 に答える
1

この投稿を見てください http://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-htaccess/まだ試していませんが、デモはかなり説得力があるようです

于 2013-11-23T13:18:37.820 に答える
1

これを使って

    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ $1.html [L,QSA]
于 2012-12-13T09:05:33.263 に答える
1

このようなタスクには複雑な (本質的に) RewriteRules は必要ないことに注意してください。

多くの場合、デフォルトで有効になっているmod_negotiation Apache モジュールは、 Multivewsオプションでこのような動作を提供します。

サーバーが /some/dir/foo の要求を受け取り、/some/dir/foo が存在しない場合、サーバーはディレクトリを読み取り、foo.* という名前のすべてのファイルを探し、それらすべての名前を付けた型マップを効果的に偽造します。クライアントがファイルの 1 つを名前で要求した場合と同じメディア タイプとコンテンツ エンコーディングを割り当てます。次に、クライアントの要件に最適なものを選択し、そのドキュメントを返します。

.ie を要求すると、それがディレクトリである場合foo/barはサービスを提供し、そうでない場合は をシークします。foo/barfoo/bar.htmlfoo/bar.txt

このオプションが現在のコンテキスト (ディレクトリなど) で有効になっていることを確認する必要があります。

Options +Multiviews
于 2012-12-13T08:43:03.457 に答える