0

URL からファイル拡張子を自動的に削除する方法はありますか?

例:

ユーザーの種類

www.website.com/page.html

ページを次のように自動的に変換します。

www.website.com/page

可能であれば/

www.website.com/page/

.htaccessURL にファイル拡張子の書き換えを強制することは、自動的に行う必要があります。

4

3 に答える 3

1

あなたはこれを間違った方法でやろうとしています。拡張機能を削除したくありません。拡張子のないリクエストを実ファイルに書き換えたい。したがって、ユーザータイプの場合

http://foo.bar/file

サーバーは要求どおりに機能します

http://foo.bar/file.html

これを行うには、必要に応じmod_rewriteて(または同等の)書き換えルールを設定します。同じモジュールを使用して、URL の見栄えを良くすることもできます。

http://foo.bar/script.php?id=34&smth=abc

あなたが持つことができます

http://foo.bar/script/id/34/smth/abc

あるいは

http://foo.bar/script/34/abc

mod rewrite の詳細をお読みください

于 2012-09-28T10:27:37.130 に答える
0

これを .htaccess で使用します (index.php がページを処理しています):

RewriteRule ^home/$ index.php?page=home
// Result: http://domain.com/home/

より動的にしたい場合:

RewriteRule ^(.*)/$ index.php?page=$1
// Result: http://domain.com/any-page/

ページをリクエストするときに必要になる可能性のある追加データについては、次のようにします。

RewriteRule ^(.*)/(.*)/$ index.php?page=$1&id=$2
// Result: http://domain.com/data-page/15/

インデックス部分なしで呼び出されたページを取得したい場合:

RewriteRule ^(.*)/$ $1.php

ユーザーが追加した拡張機能を削除するには:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_FILENAME}\.html -f
于 2012-09-28T10:35:00.030 に答える
0

2 つのことを行う必要があります。最初に、すべてのリンクを拡張子のない URL に変更する必要があります。次に、301 リダイレクトを作成して、拡張子付きの古い URL をまだ持っている可能性のあるブラウザとボットを新しい見栄えの良い URL にリダイレクトする必要があります。これは新しい場所のサーバー応答であり、書き換えではありません (サーバー上のみの内部 URI 書き換え)。

RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /(.*)\.(html?|php)
RewriteRule ^ /%2/ [L,R=301]

これにより、誰かhttp://www.website.com/page.htmlがブラウザに入力するとリダイレクトされhttp://www.website.com/page/、新しい URL がブラウザの URL アドレス バーに表示されます。

2 番目に行う必要があるのは、有効なリソースに内部的に戻す/page/ことです。存在しないため、404 が返されます。

# need these so we don't clobber legit requests, just pass them through
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# now check the extensions
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]

RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.html -f
RewriteRule ^ /%1.html [L]

RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.htm -f
RewriteRule ^ /%1.htm [L]

これらをドキュメント ルートの htaccess ファイルに入れるだけです。

于 2012-09-28T19:22:27.343 に答える