URLから.htmlを削除する方法は?


112

.html静的ページのURL から削除する方法は?

また、URLのあるURLをURLのないURLにリダイレクトする必要があり.htmlます。(すなわちwww.example.com/page.htmlまでwww.example.com/page)。


1
「.htmlを削除する」とは、「。htmlが存在する必要がない」という意味ですか。
オービットでの軽さのレース

@Tomalak:はい、「。html」のあるURLを、ないURLにリダイレクトします。私の問題は、これが無限のリダイレクトにつながることです。現在の設定では、www.example.com / page.htmlとwww.example.com/pageの両方にアクセスできますが、これはSEOフレンドリーではありません。
Daveは


@Tomalak:ヒントをありがとう。mod_rewriteのドキュメントを読むことは非常に役に立ちました。
デイブ

回答:


105

ジョンの答えのいくつかの説明は建設的だと思います。以下:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

指定されたファイルまたはディレクトリがそれぞれ存在しない場合、書き換えルールが続行することを確認します。

RewriteRule ^(.*)\.html$ /$1 [L,R=301]

しかし、それはどういう意味ですか?これは、使用する正規表現(正規表現を)。ここに私が以前に作った小さなものがあります... ここに画像の説明を入力してください

それ正しいと思います。

注:テスト時に.htaccess 、301リダイレクトを使用しないでください。ブラウザが301をキャッシュするため、テストが完了するまで302を使用します。https://stackoverflow.com/a/9204355/3217306を参照してください

更新:少し誤解しました.。改行以外のすべての文字に一致するため、空白が含まれます。また、これは役立つ正規表現チートシートです

出典:

http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2

https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules


6
答えを説明するのに役立つ素晴らしい図。
Ric

301とブラウザキャッシュのヒントが私の問題を解決したものです。
bgfvdu3w

@KnocksX私はもはやWebマスターではなく、手助けできる立場にありません
binaryfunt

84

URLから.html拡張子を削除するには、root / htaccessで次のコードを使用できます。

RewriteEngine on


RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]

注:たとえば.php拡張子を削除するなど、他の拡張子を削除する場合は、上のコードのhtmlphpに置き換えてください。


10
他の回答はどれもうまくいきませんでしたが、これはうまくいきました。
Emmet Arries 2016年

2
これも私のために働いた。ありがとう@starkeen。^投票してください。
JeremyS 2016年

2
完全にうまくいきました。ありがとうございました!
ixany

これは私のためにファイル拡張子を削除しますが、そのページにリダイレクトしません
Bhargav Venkatesh

74

Apacheで.htaccessを使用すると、次のようにリダイレクトできます。

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

URLからの.htmlの削除については、単に.htmlのないページにリンクします

<a href="http://www.example.com/page">page</a>

23
これは私には何もしません。それが機能しない理由はありますか?
Michael Yaworski、2014

リクエストされたリンクの実際のファイルはありますか?それがトリガーになる!-f
Martijn

72

これはあなたのために働くはずです:

#example.com/page will display the contents of example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

#301 from example.com/page.html to example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

3
私はこのコードでGodaddyで404を取得していたので、次のように修正しました。最上部にOptions + FollowSymLinks -MultiViews -Indexes
Labanino 2014

1
私はこれが最良かつ最も完全な答えだと思います、ありがとう!
ctekk 2017年

これをlocalhostで実行しようとしましたが、機能していません。他に何かする必要があることはありますか?.htaccessファイルをリンクする必要がありますか、それともページはそれをどのように認識しますか?
Pianistprogrammer

example.com/page.htmlからexample.com/pageに.php拡張子を#301に追加するにはどうすればよいですか?

20

あなたも持っOptions -MultiViewsていることを確認する必要があります。

上記のいずれも、標準のcPanelホストでは機能しませんでした。

これはうまくいきました:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

上記のすべての回答のうち、最終的にはうまくいきました..私のサイトはcPanelを使用するgodaddyでホストされているためと思います。重要なのは、Options -MultiViews
Brad Vanderbushが

はい、このセクションでは何も機能せず、この答えを期待しています!あなたはその日を救った!
Neil

どうも。他の人が期待どおりにうまくいかなかった理由がわかりません。
Nanoo

13

お返事ありがとうございます。私はすでに問題を解決しました。私のページがhttp://www.yoursite.com/htmlにあるとすると、次の.htaccessルールが適用されます。

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
   RewriteRule .* http://localhost/html/%1 [R=301,L]

   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
   RewriteRule .* %1.html [L]
</IfModule>

6

私はこの.htacessを使用して、URLサイトから.htmlを削除しています。これが正しいコードであることを確認してください:

    RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]

ここで紹介した他のソリューションとは異なり、これは私にとってはうまくいくようでした、ありがとう。ただし、HTMLのリンクを更新する必要があることを付け加えておきます(したがって、元々.htmlファイルに<a href="page1.html"> </a>としてリンクしている場合は、 <a href=" example.com/page1"> </ a >とすると、機能します。)
Lorenzo

私にとっての中心的な変更はRewriteBase /少しでした。残念ながら、なぜ機能したのかはわかりませんが、すぐにわかると思います。
キノクレイトン

4

Firebaseホスティングを使用しているユーザーの場合、このページではどの回答も機能しません。.htaccessFirebaseホスティングでは使用できないためです。firebase.jsonファイルを構成する必要があります。"cleanUrls": trueファイルに行を追加して保存するだけです。それでおしまい。

行を追加すると、firebase.jsonは次のようになります。

{
  "hosting": {
    "public": "public",
    "cleanUrls": true, 
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

2

URLから.html拡張子を削除するには、root / htaccessで次のコードを使用できます。

#mode_rerwrite start here

RewriteEngine On

# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.

RewriteCond %{REQUEST_FILENAME} !-d

#Check for file in directory with .html extension 

RewriteCond %{REQUEST_FILENAME}\.html !-f

#Here we actually show the page that has .html extension

RewriteRule ^(.*)$ $1.html [NC,L]

ありがとう


-1
RewriteRule /(.+)(\.html)$ /$1 [R=301,L] 

これを試してください:)それが機能するかどうかわかりません。


4
機能するかどうかわからない場合は、回答として投稿しないでください。
それは問題ではない
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.