2011-12-21 7 views
2

サイトビルダーが自動的に内部パスをすべて小文字に設定しているかなり大きなサイトを持っています(ページ自体、メニューなどで)。現時点では、サイトの新しいD7バージョンには、数百からおそらく1,000以上のノードの古い(大文字の)バージョンにリンクする他のサイトがあります。新しいDrupalサイトへの外部リンクの取得404

http://www.example.com/alzheimersへのリンクは正常に動作しますが、手動で​​と入力すると、私たちのカスタム404(メッセージが表示されたDrupalテーマ)に移動します。これは、古いURLへの外部リンクがたくさんある視認性の高いサイトであるため、問題です。

sitebuildersも手動/Alzheimers/alzheimersのリダイレクトを入力しようとしましたと、もちろん、これは無限のリダイレクトループ、ブラックホール、ゾンビの戦争を作成し、など私はmod_speling」Apacheでこれを処理しようとしました私はこのモードで豊富な経験を持っていませんが、成功はありません。私は何かが不足しているかどうか疑問に思っています/大文字の変更のための特定のルールが必要ですか?私が続いた手順は、私がmodを有効にしてApacheを再起動したことです。それは助けになりませんでした。

テーマ(hook_init?)にフックして、リクエストされたURLを取得して文字列を低く設定するための小さなPHPをスローする必要があるのだろうかと思います。何か案は?私はそれをコーディングするのに問題はありませんが、これを処理する簡単な方法があれば、どんな助けも大いに評価されます。

これは、Windows用に書かれ、DrupalまたはLAMPに一般的に転送されるサイトの一般的な問題であるため、これを修正する必要がある人はいないでしょう。

カスタムDrupalコードが必要な場合は、このような目的でフックするのが最適でしょうか?

答えて

1

私はhook_init()がプロセスであまりにも遅く呼び出されると考えています(ブートストラップはすでに完了しており、パスはその時点で解決されています)。代わりにhook_boot()をしようとする場合があります:

あなたが systemテーブルにモジュールのポップをインストールし、あなたのフックを確実にするために -1にごモジュールの weight列を設定したら
function mymodule_boot() { 
    $_GET['q'] = strtolower($_GET['q']); 
} 

は、他のモジュールのフックの前に呼び出されます。その後、Drupalのキャッシュをフラッシュしてください。

検索エンジンには重複した内容の2つの別々のページとしてhttp://www.example.com/alzheimershttp://www.example.com/Alzheimersが表示されます。理想的には、古いページから新しいページに301のリダイレクトをしたいと思うかもしれませんが、これははるかに複雑で、hook_url_inbound_alterを実装することになります。

+0

すばらしい答えです。私もhook_bootの使用を検討していましたが、私はどこか2つのうちの1つがキャッシュされたページや何かで動かなかったと読んだと思うので、なぜhook_initが良い選択肢だろうと思ったのですか? – amatusko

+0

申し訳ありません、私はこのフォーマットを初めて使っています。編集を忘れました。私はモジュールをトップ+ 1に並べ替えるアプローチが好きです。私はあなたの答えをアップアップするのに十分なrepzを持っていればよかったです。\ nしたがって、私はApacheを介して私のサーバに来るはずのリクエストを持っていますが、Drupalが内部で実行しているので、 phpはApacheの中で動いています(話す)。私はdrupalが私のサーバーの設定を上書きする方法を理解できません。 – amatusko

+0

皮肉なことに、サイトビルダーがdrupalのmodシステムを使って/ Alzページから/ alzページにリダイレクトを追加しようとしたとき、彼は良い古い無限リダイレクトループエラービジネスを手に入れました。 – amatusko

関連する問題