2012-08-10 82 views
0

我想將我的.htaccess文件 - 重定向到我的虛擬主機的conf文件...htaccess的轉移到虛擬主機不打漂亮

這是工作 - 但htaccess的重定向不...

<VirtualHost *:80> 
ServerName dev.x.com 
ServerAlias dev.x.com 
DocumentRoot "C:/wwwroot/x" 
Alias  /modules/ "C:/wwwroot/x/_my_modules/" 
ErrorLog "C:/wwwroot/x/_my_logs/error.log" 
CustomLog "C:/wwwroot/x/_my_logs/access.log" combined 
<Directory "C:/wwwroot/x/_my_logs/" > 
    Options FollowSymLinks 
    AllowOverride All 
    Order deny,allow 
    Deny from all 
    Satisfy all 
</Directory> 
</VirtualHost> 

那麼我這樣做 -

<VirtualHost *:80> 
    ServerName dev.x.com 
    ServerAlias dev.x.com 
    DocumentRoot "C:/wwwroot/x" 
    Alias  /modules/ "C:/wwwroot/x/_my_modules/" 
    ErrorLog "C:/wwwroot/x/_my_logs/error.log" 
    CustomLog "C:/wwwroot/x/_my_logs/access.log" combined 
    <Directory "C:/wwwroot/x/_my_logs/" > 
     Options FollowSymLinks 
     AllowOverride All 
     Order deny,allow 
     Deny from all 
     Satisfy all 
    </Directory> 

    RewriteEngine on 

    # if requested URI is not a file and not a directory 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 

    # externally redirect to /newLocation/{URI} 
    # RewriteRule (.*) index.php?_req=$1 [L] 

    # could use a redirect to a new directory --- 
    RewriteRule^/_mf_modules%{REQUEST_URI} [L,R=301] 
</VirtualHost> 

我的目標是這樣的: 我想任何「目錄」的要求 - 不存在的 - 要重新路由到在_my_modules DIR一個該名稱的目錄。

如果文件不存在我想在_my_modules dir中重定向到該名稱的目錄。

所以,如果www.x.com/xxx是網址...和「XXX」目錄不存在,我會重定向到www.x.com/_my_modules/xxx

和喜歡聰明如果www.x.com/xxx.php請求 - 但xxx.php不存在,他們回函被重定向到www.x.com/_my_modules/xxx

  • 但(即使是index.php在每個目錄中)這些總是導致eURL重定向到此...

    請求的URL/modules/modules/modules/modules/modules/modules/modules/m在此服務器上找不到模塊/模塊/模塊/模塊/模塊/模塊/模塊/模塊/模塊/模塊/模塊/模塊/ _my_modules /。

所以我厭倦了,改變了虛擬主機文件回到我不得不首先,重新啓動Apache和它仍然重定向,我無法擺脫的行爲。

回答

1

您可以將RewriteRules從.htaccess移動到VirtualHost環境,方法是將它們置於虛擬主機配置中的<Directory>環境中。

在你的情況下,嘗試通過剪切和粘貼在<Directory "C:/wwwroot/x/_my_logs/" >

你重寫規則如果你真想把他們在虛擬主機環境中,您必須修改它們的路徑:在.htaccess或的RewriteRules是相對的到目錄中,VirtualHost中的RewriteRules對文件系統或DocumentRoot的根是絕對的。

的RewriteCond例如:

RewriteCond %{REQUEST_FILENAME} !-f 

應該在虛擬主機:

RewriteCond /your/documentroot/%{REQUEST_FILENAME} !-f 

重寫規則例如:

RewriteRule (.*) /your/documentroot/index.php?_req=$1 [L] 

應該在虛擬主機:

RewriteRule (.*) index.php?_req=$1 [L]