2011-10-18 8 views
0

一連のスペースを確認し、それらをhtaccessのダッシュに変換する必要があります。 私はリダイレクトしているいくつかの違ったURLがありますが、タグが1ワードの場合は現在正常に動作しています.../word1-word2の場合は/ word1%20word2のスペースがある場合です。URL内の未知量のスペースをダッシュ​​で置き換える必要があります。

今は...必ずしも1つのスペースしかないとは限りません。時には2つありますが、G.webmasterツールの競合では最大6つまでです。

私の現在の書き換えは、下のURLシーケンスで機能します。

RewriteRule ^.+\(offset\)/+.*?/\(tag\)/([^.]+)$ /tag/$1 [R=301,L] 

作品:www.domain.com/index.php/Blog/(offset)/48/(tag)/word1

作品:www.domain.com/Blog/(offset )/ 328 /(タグ)/ワード1用

作品:www.domain.com/:www.domain.com/Tags/(offset)/24/(tag)/word1

が機能しませんindex.php/Blog /(オフセット)/ 48 /(タグ)/ word1%20word2%20word3

は、www.domain.cで機能しませんwww.domain.com/Tags/(offset)/24/(tag)/word1%20word2

:OM /ブログ/(オフセット)/ 328 /(タグ)/ワード1%20word2

は動作しません

SOO ...私は、未知のスペースを捕らえてダッシュで置き換える方法を理解しようとしています。ハーフ!

答えて

0

まあ...ここのコードが効いているようです。301 Redirect to replace all spaces to hyphens

RewriteCond %{THE_REQUEST} (\s|%20) 
RewriteRule ^([^\s%20]+)(?:\s|%20)+([^\s%20]+)((?:\s|%20)+.*)$ $1-$2$3 [N,DPI] 
RewriteRule ^([^\s%20]+)(?:\s|%20)+(.*)$ /$1-$2 [L,R=301,DPI] 

私は私のオリジナルの後にそのルールを持って、それがうまく動作しているようです。これは誰もが問題を把握するのに役立ちます。 :)

+0

その正規表現はコード化されたものとしてはあまり動作しません。 '[^ \ s%20]'の残りのインスタンスの代わりに '(?:\ s |%20)'を使う必要があります –

0

未知数の空白と一致させ、代わりにmod_rewriteを使用することが可能かどうかはわかりません。

単純なPHPに内部的に(Rなしで)リダイレクトし、空白で区切られた値をパラメータとしてPHPスクリプトに渡し、PHPコードで必要な置き換えを行い、PHPに外部(URL Location:/ new-urlを設定することによって)訂正されたURLにリダイレクトする場合、同様の方法がhereと記載されています。

とにかく純粋の.htaccess/mod_rewriteのソリューションを探しているなら、これはあなたが始めるかもしれない何かである:

RewriteRule ^temprewrite/([\S]+)$ /tag/$1 [R=301,L] 
RewriteRule ^temprewrite/(.*?)\s(.*) /temprewrite/$1-$2 
RewriteRule ^.+\(offset\)/\d+/\(tag\)/(.*) /temprewrite/$1 
  • 3行目は空白で区切られたタグを抽出して前処理を行います。それは内部的に書き直され、第1または第2のルールと一致します。
  • [\S]+と一致する空白がなくなった場合、最初のルールは最終的なリダイレクトを行います。
  • 第2の規則は、一時的な値を最初の空白で区切られた2つの部分に分割し、-で部分を連結し、その結果を書き換えエンジンに戻します。

この「コード」は完全にテストされておらず、まれにしか見逃したり、複数の内部書き換えにつながる可能性がありますが、十分にうまく動作していると思います。

+0

私は8時間のためにちょっと変わったstackoverflowルールのために自分自身に答えることができませんでした...しかし、ここに私が見つけてそれを動作させるためにしたものがあります。 http://stackoverflow.com/questions/5821120/301-redirect-with-spaces 私はオリジナルのものの後にそのルールを持っていますが、うまく動作しているようです。これは誰もが問題を把握するのに役立ちます。 :) –

関連する問題