2

.htaccess のこのコード (オンラインで見つかったコード) を使用して、URL から .html 拡張子を削除しようとしています。

Options +FollowSymLinks

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

機能していません。これを使用して mod-rewrite が有効になっているかどうかをテストするという投稿を見つけました。/usr/local/apache/bin/httpd -D DUMP_MODULES | grep rewrite

戻り値:

Syntax OK
 rewrite_module (static)

エラーログには何もありません。問題がある場合、これはWHMとcPanelを備えたサーバー上にあります。私の他の .htaccess ディレクティブは機能しています。

4

2 に答える 2

1

既存の html ファイルに対してリクエストを行う場合、これらの条件により、ルールは何も実行できなくなります。

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

彼らが言うように、要求されたファイルが存在せず、ディレクトリでもない場合...そして、html ファイルを要求すると、-fテストに失敗します。したがって、ルールは何もしません。

実際のリクエストのようなものと照合したい:

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

これにより、既存の HTML ファイルに対する要求が、拡張子を除いた同じパスにリダイレクトされます。その後、内部的に書き直すことができます。

RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ /$1.html [L]
于 2013-01-04T23:14:29.670 に答える
1

あなたのコードは、あなたが達成しようとしていることと正反対です。正しいコードは次のようになります。

Options +FollowSymLinks

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
于 2013-01-04T22:29:54.890 に答える