2

.htacess に次のコードがありますが、正しく動作しませんでした。mod-rewrite が「オン」になっていないためですか? そうであれば、どうすれば確認できますか?

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)\$ $1.php [nc]

住所の名前を変更したかったのです。例:

http://www.abc.com -> http://www.abc.com

http://abc.com -> http://www.abc.com

http://www.abc.com/123.html -> http://www.abc.com/123

http://www.abc.com/12-12-12.html -> http://www.abc.com/12-12-12

http://subdomain.abc.com/123.html -> http://subdomain.abc.com/123

基本的に拡張子を削除し、その www が損なわれていないことを確認します。

編集:

に書き直しました

Options +FollowSymlinks
RewriteEngine on
RewriteCond % ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteRule ^(.*).php $1

しかし、まだ機能していません

4

4 に答える 4

5

ステップ1。

すべてのリンクを変更して、リンクから.html削除します。Multiviewsオフになっていることを確認します。

Options -Multiviews

ステップ2。

ホスト名に www がない場合にブラウザをリダイレクトするルールが必要です。

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

ステップ 3。

URL が要求された場合、または拡張子が削除された場合にブラウザーをリダイレクトするルールが必要です。.html.php

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /([^\ ]+)\.(php|html?)
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ /%2 [L,R=301]

ステップ 4。

リクエストが実際に php または html ファイルに対するものであった場合、URIを内部的に書き換えるルールが必要です。

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

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

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

.htaccess

全体として、htaccess に次のルールを含める必要があります (この問題を解決しようとして既に持っている可能性のあるルールは破棄してください)。

# Make sure Multiviews is off
Options -Multiviews

# turn on rewrite engine
RewriteEngine On

# Redirect requests that are missing www and not a subdomain
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

# Redirect if requests is for a .htm, .html, or .php
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /([^\ ]+)\.(php|html?)
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ /%2 [L,R=301]

# rewrite to the proper extension if such a file exists
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ /$1.php [L]

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

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

したがって、完全に:

  • ブラウザの URL アドレス バーに http://example.com/index.html と表示されている場合、http: //www.example.com/indexにリダイレクトされます。
  • ブラウザの URL アドレス バーに http://www.example.com/index と表示されている場合、 http://www.example.com/index.html (または存在する場合)のコンテンツが表示されます。アドレス バーは変更されません。index.php
  • ブラウザの URL アドレス バーにhttp://foo.example.com/images/image.pngと表示されている場合、 に画像が表示され/images/image.pngます。アドレス バーは変更されません。
  • ブラウザの URL アドレス バーに http://foo.example.com/path/foo/bar.php と表示されている場合、http: //foo.example.com/path/foo/barリダイレクトされます。
  • ブラウザの URL アドレス バーにhttp://foo.example.com/path/foo/barと表示されている場合、 http://foo.example.com/path/foo/bar.phpのコンテンツが表示されます。アドレス バーは変更されません。
于 2012-10-03T05:12:30.510 に答える
0

.html を削除します。

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

wwwを追加。:

RewriteCond % ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
于 2012-09-23T15:31:39.223 に答える
0

あなたのウェブサイトはどのホスティングにありますか?mod-rewrite が有効になっていますか? アクティブ化されていない場合は、ホストに連絡して装着しましたか?

androbin ( https://stackoverflow.com/a/12553613/1713771 ) によって以前に投稿されたソリューションは正しいです。

于 2012-10-02T09:27:50.267 に答える
0

私が使用する.htaccessファイル:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)$ $1.html
</IfModule>

これにより、.htmlファイル拡張子が削除され、 www.

于 2012-10-02T19:26:02.047 に答える