1

このテーマに関する投稿はほとんど見たことがありませんが、目的を達成するにはまだいくつかの問題があります。私の古い URL は次のようなものでした。

http://myhostname.com/offer/1234_Nice_Offer_Cool_Whatever_HEllyeah.htm

そして明らかに私はそれらを次のように書き直したい:

http://myhostname.com/offer/1234-nice-offer-cool-whatever-hellyeah.htm

これは、.htaccess で試したコードです。これは、ディレクトリを持たない URL のアンダースコアを置き換えるのにうまく機能します。

RewriteCond %{REQUEST_URI} \.htm$ [NC]    
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [E=underscores:Yes,N] 
RewriteCond %{ENV:underscores} ^Yes$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

したがって、このルールのペアは、次のような URL でうまく機能します。

http://myhostname.com/1234_Some_Section_hellyeah.htm

しかし、URL に同じコードを試してみると、次のようになります。

http://myhostname.com/dir1/dir2/dir3/1234_Some_Offer_Or_Section.htm

次に、サーバーは無限ループを作成します ([N] フラグについて説明します...) 基本的に、ディレクトリごとの URL がこれらのルールにどのように影響するか、およびなぜこの無限ループが発生するのかを知りたいと思います。ありがとう!

4

1 に答える 1

2

N フラグは必要ありません。アンダースコアを再帰的にハイフンに置き換えるには、次のコードが機能します。

RewriteRule ^([^_]+)_(.+?\.htm)$ $1-$2 [L,NC,E=underscores:Yes]

RewriteCond %{ENV:REDIRECT_underscores} ^Yes$
RewriteRule ^([^_]+)$ /$1 [R=301,L]
于 2013-07-19T11:09:10.460 に答える