2009-04-16 145 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」 這說明我的網頁。但是,當我的朋友「http://localhost/b.html」apache2/error_log說「文件不存在:b.html」 缺少啓用rewrite_module的任何設置?

+0

您重新啓動了Apache,對吧? – Greg 2009-04-16 07:19:51

回答

5

問題出在您的RewriteRule中。這應該工作:

RewriteEngine On 
RewriteRule ^/b.html$ /a.html [L] 
  1. 規則匹配( ^b.html$)不得包含起始斜線。 (這個作品在.htaccess,但不能在服務器配置)
  2. 重寫的目標應該是一個相對URI如果可能的話(即在同一臺主機上)
  3. 規則應與指令「做什麼」結束 - 在這種情況下,[L]檐口處理(不會再處理更多規則)
+1

此外,當您正在調試重寫時,將規則放入DocumentRoot中的.htaccess會更容易 - 無需重新啓動服務器。 – Piskvor 2009-04-16 07:34:32

+2

1. is for .htaccess - 當你在.conf中時,你需要/ 2.同意3.你不需要這個 - 當[L]已經是最後一個規則時不需要任何東西 – Greg 2009-04-16 07:40:13

1

您是否在虛擬主機部分中有?

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

你檢查是否在你的Apache配置文件(最有可能的httpd.conf)的別名或虛擬主機部分的指令:

AllowOverwrite All 

我的modrewrite不工作,因爲我同樣的問題關掉它:

AllowOverwrite None 

祝你好運。

1

現在有效。必須做兩件事情:

  1. 更改設置 「AllowOverride無」 在/ etc/apache2的/網站可用/默認設置 「AllowOverride全部」。

  2. 把重寫規則/var/www/.htaccess而非httpd.conf中

我不知道爲什麼它不工作在httpd.conf。但是在做了以上兩件事情之後它就行得通。