web-dev-qa-db-ja.com

Windows Azureで実行されているUbuntuサーバー14.04でRewriteRuleが正しく機能しない

私のサーバーではsignup.phpを保持し、。htaccessでこれを保持しました-

RewriteRule ^/registration /?$ http://www.example.com/signup $ 1 [R]

しかし、これはwww.example.com/registration/www.example.com/signup/にリダイレクトしていません

RewriteRule ^/registration /?$ signup.php $ 1 [R]

そしてまた-

RewriteCond%{REQUEST_URI} ^ registration/$ [NC] RewriteRule ^(。*) http://example.com/signup [R = 301、L

しかし、何もうまくいきません。 404エラーメッセージが表示されます。 Apache 2.2.22を実行しているWindows AzureサーバーでUbuntu 14.04を使用しています

1
user3509725

書き換えルールに問題があるようです。

  • RewriteEngine Onでmod_rewriteを明示的にオンにしない
  • 。htaccessファイルで書き換えルールを使用する場合、それらの先頭のスラッシュが想定されます。ルールの先頭にスラッシュがあると、書き換えによるルールの実行が妨げられます。 (これは、ルールがhttpd.confにあり、先頭にスラッシュが必要な場合とは異なります。)
  • 最初のルールに余分な$1があります。 $1を持つことは、ルールの最初の部分の括弧内にあるものへの後方参照でなければなりません。括弧がないため、そのルールは正しく機能しません。
  • Mod_rewriteでリダイレクトする場合、Lフラグを常に使用して、最後にトリガーされる書き換えルールであることを確認することをお勧めします。
  • ほとんどの場合、R=301で「永続的な」タイプのリダイレクトを指定して、SEOにやさしい一時的なリダイレクトを行わないようにします。
  • 最後のルールは複数行である必要があります。
  • 最後のルールに終了]がありません。

私はまず、この単純なものに対して単純なリダイレクトディレクティブを使用することをお勧めします。

redirect permanent /registration /signup

それでも解決しない場合は、書き換えルールを修正できます。

RewriteEngine On
RewriteRule ^registration/?$ /signup [L,R=301]
1