1

Apacheを使用してWebサイトにmod_rewriteを設定しようとしています

これが私の文章です:

RewriteEngine on
RewriteRule ^news/Actualites/([^/]+)/?$ news/Actualites_d.tpl?SKU=$1 [L]

しかし、それは機能していません

私は他の書き直しを行っています、私は次のような単純なものをテストしました:

RewriteEngine on
RewriteRule ^ancienne-url\.html$ /nouvelle-url.html [R=301,L]

これは機能しています。

HtaccessとVhostに入れようとしましたが、どちらも機能しません。

私も以下を取得したいです

news/Actualites/MYPRODUCT私が次のようなURLを持っているときnews/Actualites_d.tpl?SKU=MYNUMERIC_ID

片側に「言葉」を入れることができるかどうかはわかりませんが、通常は側の数字IDです…よろしくお願いしますローレンス

4

2 に答える 2

0

試す:

RewriteEngine on
RewriteBase /
RewriteRule ^news/Actualites/([^/]+)/?$ news/Actualites_d.tpl?SKU=$1 [NC,QSA,L]

質問の最初の部分。

2 番目の部分については、RewriteRule を使用して実現できますが、それはすべての URL をハードコーディングすることを意味し、あまり良い考えではありません。

RewriteRule ^news/Actualites/MYPRODUCT$ news/Actualites_d.tpl?SKU=MYNUMERIC_ID [NC,QSA,L]

そして、異なる URL ごとに MYPRODUCT と MYPRODUCT_ID を置き換えて、上記の行を複製する必要があります。

この状況で通常行うことは、次のようなルールを設定することです。

RewriteRule ^news/Actualites/([^/]+)$ news/Actualites_d.tpl?SKU=$1 [NC,QSA,L]

また、actualites_d.tpl スクリプトは、データベースなどにクエリを実行して、渡された URL 値に必要な情報を取得します。

SELECT * FROM tbdProduct WHERE fldProductURLSlug = SKU
于 2012-04-24T18:16:57.343 に答える
0

したがって、書き換えルールにはいくつかの問題があります。一般的な慣行として、循環的なローカル書き換えを防ぐために完全な URL を追加する方が一般的には優れています。2 番目の問題は、リライト ルールが URL がニュースで始まることを期待していることですが、実際には /news であるため、互換性を修正するには、多かれ少なかれ次のようになります。

RewriteRule ^/?news/Actualites/(.*)/.*$ http://{$HTTP_HOST}/news/Actualites_d.tpl?SKU=$1 [R=301,L]

SO この例では、/ と ? を追加したことがわかります。/ が設定されていない場合の互換性のためです。次に、(.*) が表示されます。丸括弧は変数の割り当てを示します。それらの複数を設定して、$1 $2 などで使用できます。最後に、リダイレクトの場所を 301 リダイレクトとして設定しました。RewriteBase の使用は、たとえば /blog/ のようなエイリアス ディレクトリでサービスを提供している場合を除き、無関係です。

前の例では、RewriteBase を / に設定してから、^news の書き換えルールを実行します。ただし、開始スラッシュを除外して受信する可能性のある一部のリクエストは考慮されていません。

完全を期すための別の例は次のようになります。

RewriteRule ^/?news/Actualites/(.*)/(.*)/(.*)/.*$ http://{$HTTP_HOST}/news/Actualites_d.tpl?SKU=$1&orderid=$2&somvar=$3 [R=301,L]
于 2013-02-27T02:31:32.897 に答える