web-dev-qa-db-ja.com

.htaccessに一般的な書き換えルールを作成する

アップグレードシナリオでは、実際にwww.server.com/reading_23.htmlを提供するwww.server.com/reading/23のようなエイリアスURLを提供する必要があります。

.htaccessに次の行を追加して、この作業を行うために何時間も費やしました。

RewriteRule reading_(.*).html reading/$1

その行をRewriteBase /の直後の標準D8 .htaccessに入れました。残念ながら、私の試みはどれもうまくいきませんでした。 /readingは、私のmodules.routing.ymlから提供されたパスです。

編集、18.1これは、Drupalにとって非常に特別なようです。これは、既存のD8リダイレクトでは機能しないためです。リダイレクト([L,R])のみを実行できますが、私のエンドユーザーはブラウザでreading/23パスを確認できます。実際の問題は、Drupalでreading_23.htmlのようなURLを作成する方法です。ルーティングパラメータは、パスの個別の部分としてのみ有効です( reading/{number}は問題ありませんが、reading_{number}.htmlは不良です)。

これを行う方法を知っている人は誰ですか?

DrupalすべてのノードIDのDBにエイリアスを作成したくありません。

[EDIT Nr 2. 2017年1月18日]

ソリューションは、4k4が書いたようなインバウンドパスプロセッサです。どうもありがとう。

[編集を終了]

3
Rainer Feike

あなたの書き換えはdrupal標準.htaccessの他の書き換えと衝突します。リダイレクトを試してください。リダイレクトはすぐに実行され、残りの.htaccessは処理されなくなります。また、URLが変更されたことを検索エンジンに伝えます。

RewriteRule reading_(.*).html reading/$1 [L,R=301]
3
4k4

このコードを.htaccessの問題に書き換えます。コードは、reading_.htmlの間の任意の文字列に対して機能します

  RewriteEngine On
  RewriteRule ^reading_(.*)\.html$ http://www.server.com/reading/$1 [L,R=301]

うまくいけば、これでうまくいきます。

2
Ashish Deynap