0

あるサイト言語/CMS (coldfusion/custom) から別の (PHP/Drupal) に移行しており、古いページの一部を新しいページにリダイレクトする必要があります。これは Linode の vps であるため、.htaccess と httpd.conf (および apache2.conf) の両方にアクセスできます。

それらのほとんどは正規表現 (URL に GUID が含まれている) では実行できず、静的リダイレクトを記述しても問題ありません。

次に例を示します。

  RewriteRule /show.cfm/FG3f4-30F1G/ http://www.mysite.com/john-smith [R=301]

それだけです...開始キャレット^、終了ドル記号を使用して構文を試しましたが、どれも機能していないようです。

RewriteCond が果たす役割について誤解している可能性があります。.htaccess には既に他の行があります。

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

RewriteRule を指定したら、RewriteCond を再宣言する必要がありますか?

また - 理想的には、.htaccess のクリーンさを維持するために、RewriteMap を使用したいと思います。ここでは、1 つのテキスト ファイルを指定し、「古い URL | 新しい URL」のタブ区切りの列を 2 つだけ持つことができます。それも機能しません(使用するのが適切である場合でも)。

どんなアイデアでも大歓迎です...

4

3 に答える 3

0

「Linode」VPS を使用している場合は、仮想ホスト構成ファイルを「AllowOverride None」から「AllowOverride All」文字列に更新する必要もあります。

通常、LInode では、この設定ファイルは「/etc/apache2/sites-enabled」ディレクトリにあります。このディレクトリ内のファイルを変更しないと、Linode の書き換えエンジンは機能しません。

于 2014-10-30T16:10:21.110 に答える
0

最初の静的な例では、mod_rewrites RedirectRule ではなく Redirect ディレクティブを使用する方がよいでしょう。

RewriteCond は、その直後の RewriteRule にのみ適用されます。したがって、OPでは、要求されたURIが実際のファイルまたはディレクトリではなく、ファビコンではない場合、condsは状態を示し、index.phpにリダイレクトします

カラットで試してみて動作しない場合、これはパスの問題である可能性が高く、正確な解決策は RewriteRule が httpd.conf ファイルにあるか、.htaccess ファイルにあるかによって異なります。一般に、httpd.conf で照合するパターンの前にはスラッシュが付きますが、.htaccess ファイルで照合するパターンは前に付きません。

于 2010-08-13T13:29:53.050 に答える
0

Cagsが指摘したように、ファイルでルールを定義している場合は、.htaccessパスに先頭のスラッシュが含まれていないことを確認する必要があります。Lさらに、 WordPress の書き換えセクションの上にリダイレクト ルールを配置するだけでなく、フラグを確実に使用する必要がある可能性があります。

例えば:

RewriteRule ^/?show.cfm/FG3f4-30F1G/$ http://www.mysite.com/john-smith [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

を使用する場合RewriteMapは、サーバーまたは仮想サーバー構成で定義する必要があります。通常、これはほとんどの人にとって問題ですが、VPS を使用していることを示しているので、必要なアクセス権があると思います。効率上の理由から、リクエストごとに を解析する必要があるmod_rewriteため、すべてのディレクティブをそこに置くことも有益であることに注意してください (ただし、サーバー構成は起動時にのみ処理されます)。.htaccess

サーバー マップの定義は、次のようになりますhttpd.conf(または同等のもの)。

RewriteMap redirect-map txt:/full/path/to/file/pathmap.txt

次に、それに応じてルールを変更します。

RewriteRule ^/?(show\.cfm/[A-Za-z0-9-]+/)$ http://www.example.com/${redirect-map:$1} [R=301,L]

...pathmap.txt次のようになります。

# Input                Replacement
show.cfm/FG3f4-30F1G/  john-smith
show.cfm/ABC12-40000/  jane-doe
...
于 2010-08-13T15:20:15.957 に答える