2012-08-10 29 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]