2009-04-16 26 views
3

"http://localhost/b.html" - > "http://localhost/a.html" 私はそのためにRewriteRuleを試しました。しかし、何とかそれは私のために働いていません。Apache書き換えルール

私はapache2のを使用していますし、私のhttpd.confには含まれています。私はトライ

LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_http_module modules/mod_proxy_http.so 
LoadModule proxy_connect_module modules/mod_proxy_connect.so 
LoadModule rewrite_module modules/mod_rewrite.so 

RewriteEngine On 
RewriteRule ^/b.html$ http://localhost/a.html 

は "http://localhost/a.htmlは、" それは私のWebページを示しています。しかし、私が "http://localhost/b.html"と仲直りしたときに、apache2/error_logに "file does not exist:b.html"と表示されます rewrite_moduleを有効にする設定がありませんか?

+0

Apacheを再起動しましたか? – Greg

答えて

5

問題はあなたのRewriteRuleにあります。これは動作するはずです:

RewriteEngine On 
RewriteRule ^/b.html$ /a.html [L] 
  1. ルールマッチ( ^b.html$)が始まるスラッシュを含めることはできません。 (これはいないサーバ設定で.htaccessファイルで動作しますが、)
  2. 書き換え目標相対URIである必要があり、可能な場合(つまり、同じホスト上)
  3. ディレクティブ「何をする」で終わらなければならないルール - この場合は[L]処理を行います(それ以上のルールは処理されません)
+1

また、書き換えをデバッグするときに、DocumentRootの.htaccessにルールを入れる方が簡単です。サーバを再起動する必要はありません。 – Piskvor

+2

1. .htaccessのためのものです。あなたが.confに入っているときに/ 2.合意が必要です。3.あなたはこれを必要としません - 既に最後のルールがあるときに[L]を持っていれば – Greg

+1

+1理由はわかりませんこれは下落した。ファイルの最後のルールには[L]は厳密には必要ではありませんが、新しいルールを追加したときに入れておく必要はありません。 – cletus

1

virtualhostセクション内にありますか?

AllowOverwrite All 

私は私ので、働いていないmodrewriteの同じ問題を抱えていた:

<VirtualHost *:80> 
    RewriteEngine On 
    RewriteRule ^/b.html$ /a.html 
</VirtualHost> 
3

は、あなたのApacheの設定ファイル(ほとんどの場合はhttpd.conf)エイリアスやVirtualHostのセクションの指示にするかどうかを確認しましたそれをオフにした:

AllowOverwrite None 

幸運。

1

これで動作します。 "AllowOverrideのすべて" へ

  1. 変更 "AllowOverrideのなし" では/ etc/apache2の/サイト利用可能/デフォルト:二つのことをしなければなりませんでした。

  2. は、httpd.confの作品はありませんなぜ私はわからない代わりのhttpd.conf

の/var/www/.htaccessで書き換えルールを置きます。しかし、それは上記の2つのことをした後に動作します。

+1

これはまさに私が答えたものです;-) –