2

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

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

/Alzheimersサイトビルダーはまた、手動で→のリダイレクトを入力しようとし/alzheimersました。もちろん、これにより、無限のリダイレクトループ、ブラックホール、ゾンビ戦争などが発生しました。

私はこれをapache"mod_speling"で処理しようとしましたが、成功しませんでしたが、このmodの経験は豊富ではありません。何かが足りないのではないかと思います/大文字の変更には特定のルールが必要ですか?私が従った手順では、modを有効にしてApacheを再起動しました。それは役に立たなかった。

hook_initしたがって、テーマ( ?)にフックして、要求されたURLを取得し、文字列を低く設定するために小さなPHPを投入する必要があるかどうか疑問に思っています。何か案は?コーディングに問題はありませんが、これを処理する簡単な方法があれば、どんな助けでも大歓迎です。

これは、Windows用に作成され、DrupalまたはLAMPに転送される一般的なサイトでは一般的な問題であるため、これを修正する必要がある最初の人になることはできません。

カスタムDrupalコードが必要な場合、このようなものにフックするのに最適な場所はどこですか?

4

1 に答える 1

1

プロセスの後半で呼び出されると思いhook_init()ます(ブートストラップはすでに実行されており、パスはその時点で解決されています)。hook_boot()代わりに試してみてください。

function mymodule_boot() {
  $_GET['q'] = strtolower($_GET['q']);
}

モジュールをインストールしたら、systemテーブルにポップし、モジュールのweight列を設定し-1て、フックが他のモジュールのフックよりも先に呼び出されるようにします。次に、Drupalのキャッシュをフラッシュすると、準備が整います。

ただし、検索エンジンでは、http ://www.example.com/alzheimershttp://www.example.com/Alzheimersが重複したコンテンツを持つ2つの別々のページとして表示されることに注意してください。理想的には、古いページから新しいページへの301リダイレクトを実行する必要がありますが、これははるかに複雑であり、(私は)実装が必要になりますhook_url_inbound_alter

于 2011-12-21T17:37:23.127 に答える