2012-03-09 165 views
1

我幾乎已經將它與mod_rewrite一起使用。我已經取出每隔重寫語句(除了RewriteEngine on ...雖然我應該因爲這顯然是問題),這仍然不起作用。我已經包含了我的整個虛擬主機文件,希望有人能告訴我這裏有什麼問題。我想鍵入以下重定向(內部即不可見的地址欄),像這樣Apache RewriteRule將域重定向到子文件夾導致重定向循環

  1. www.example.com--->www.example/files/main/index.php
  2. www.business.example.com--->www.example/files/business/index.php
  3. www.tech.example.com--->www.example/files/tech/index.php
  4. www.sports.example.com--->www.example/files/sports/index.php
  5. ...

我試圖同時解決這兩個1和2-5 +,這是一場災難。所以我暫時放棄了2-5 +,並試圖讓1工作,不管我做什麼,我都會得到一個重定向循環。顯然,我更喜歡複製粘貼的完美答案,但我甚至可以解決某人解釋爲什麼mod_rewrite堅持贊成重定向循環。謝謝。

<VirtualHost *:80> 
RewriteEngine on 
RewriteRule ^$ /files/main 

ServerAdmin [email protected] 
ServerName www.example.com 
ServerAlias example.com *.example.com 
DocumentRoot /var/www 
DirectoryIndex index.html index.php filename.html index.cgi index.pl default.htm 

<Directory /var/www> 
suPHP_Engine on 
suPHP_AddHandler application/x-httpd-php .php 
suPHP_ConfigPath /etc/php5/cgi/ 
AllowOverride None 
Options -Indexes +FollowSymLinks 
</Directory> 

LogLevel warn 
LogFormat "%v %l %u %t \"%r\" %>s %b" comonvhost 
CustomLog /var/log/apache2/access.log comonvhost 
</VirtualHost> 
+0

我沒有在重寫規則中看到一個'[R]'標誌,那麼你爲什麼被重定向?你可以看看瀏覽器的網絡檢查器(Chrome/Firebug中的F12)併發布請求的URL和重定向的URL嗎? – 2012-03-09 04:29:23

+0

@SalmanA它所說的是http://www.example。com/- GET --403 Forbidden --text/html – puk 2012-03-09 05:51:38

+0

403禁止與重定向循環不同。 – 2012-03-09 05:58:26

回答

0

在mod_rewrite的文檔:

http://httpd.apache.org/docs/current/rewrite/remapping.html#canonicalhost

如果你厭倦了mod_rewrite的,這可能僅僅是事情。 (您是否想要將這些網站重定向到新的URL,或者是不可見的重寫?)

我無法重現您遇到的問題。我的安裝程序有很多VirtualHost條目和目錄條目,有相當多的重寫正在進行。

我在我的主VirtualHost中添加了一條類似於你的規則。現在您應該意識到這不會匹配,因爲對文檔根目錄的請求不是空字符串,而是/

RewriteRule ^$ /foo/bar 

訪問網站時我沒有得到重定向循環;它被簡單地忽略了。然後,我把它改爲:

RewriteRule ^/$ /foo/bar 

重新啓動服務器,去,並得到了老此服務器上未找到所請求的網址/無功/網絡/富/酒吧。沒有循環。

你的設置還有其他的東西。也許你重寫的URL有一個觸發循環的本地.htaccess。 (但是他們如何被改寫爲^$的匹配。)