web-dev-qa-db-ja.com

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

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

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

90
Dave

返信いただきありがとうございます。私はすでに問題を解決しました。 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>
13
Dave

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

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

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

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

しかし、それはどういう意味ですか? regex(正規表現) を使用します。これは私が以前に作った小さなものです... enter image description here

I思考それは正しい。

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

更新:私は少し間違えましたが、.は改行を除くすべての文字に一致するため、空白も含まれます。また、 これは便利な正規表現チートシートです

ソース:

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

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

84
binaryfunt

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>
70
Jon Skarpeteig

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

#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]
66
Łukasz Habrzyk

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拡張子を削除するなど、他の拡張子を削除する場合は、上記のコードのhtml everywhereをphpに置き換えてください。

62
starkeen

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

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

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

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

私はこの.htaccessを使用して、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]
6
Anmol
RewriteRule /(.+)(\.html)$ /$1 [R=301,L] 

これを試してください:)それが動作するかどうかわからない。

0
Jarsäter