2

私はライブ サイトで作業しているので、ミスによってサーバー エラーを発生させたくありません。アンダースコアを含むすべての URL をダッシュ​​に変更する必要がありますが、1 つのディレクトリ (www.domain.com/directory/) に対してのみ変更する必要がありますが、画像、css、または js ファイルは変更したくありません。

これまでに .htaccess で取得したのは次のとおりです。

RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]

しかし、このルールを特定のものだけに指定して、画像、css、および JavaScript ファイルを除外する方法がわかりません。

何か案は?

4

1 に答える 1

2

ルールを特定のリクエストに制限するには、RewriteCond. それらに関するドキュメントはこちらにあります。

それを機能させるにwww.domain.com/directory/は、これを RewriteRule 自体に追加します。永続的なリダイレクトを使用しているため、サイトのブラウザからキャッシュをクリアするまで、現在行っている変更は機能しないことに注意してください。

RewriteRule ^directory/([^_]*)_([^_]*_.*) /directory/$1-$2 [N]
RewriteRule ^directory/([^_]*)_([^_]*)$ /directory/$1-$2 [L,R]

css および js ファイルを除外するには、次のようなものを使用できます。これにより、または( )!で終わる ( ) ファイルが除外されます。.css.js\.(css|js)

RewriteCond %{REQUEST_URI} !\.(css|js)$
RewriteRule ^directory/([^_]*)_([^_]*_.*) /directory/$1-$2 [N]
RewriteRule ^directory/([^_]*)_([^_]*)$ /directory/$1-$2 [L,R]

これらのルールをテストすることはできません。実際のサイトで実行する前に、単純な localhost サーバーをセットアップしてテストすることをお勧めします。サイトでリダイレクトをテストする場合は、永続的なリダイレクト ( ) ではなく、常に一時的なリダイレクト ( ) を使用してください。永続的なリダイレクトはブラウザによってキャッシュされ、後続のリクエストに対するサーバーの負荷が軽減されますが、テストしている場合は、以前の試行が記憶されます。すべてのルールが希望どおりに機能した後でのみ、一時的なリダイレクトを永続的なリダイレクトに変更してください。[R][R=301]

于 2013-10-19T13:41:11.937 に答える