htaccess搬到vhost不好玩

时间:2012-08-10 19:34:29

标签: apache redirect vhosts

我想移动我的.htaccess文件 - 重定向到我的vhost配置文件......

这是有效的 - 但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目录中该名称的目录。

如果文件不存在,我想重定向到_my_modules目录中该名称的目录。

因此,如果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 / modules / modules / modules / modules / modules / modules / modules / modules / modules / modules / modules / modules / _my_modules /在这台服务器上。

所以我厌倦了将vhost文件改回到我必须开始的状态,重新启动Apache,它仍然重定向,我无法摆脱这种行为。

1 个答案:

答案 0 :(得分:1)

您可以将RewriteRules从.htaccess移动到VirtualHost环境,方法是将它们放在vhost配置的<Directory>环境中。

在您的情况下,请尝试在<Directory "C:/wwwroot/x/_my_logs/" >

中剪切并粘贴重写规则

如果你真的想把它们放在VirtualHost环境中,你必须修改它们中的路径:.htaccess中的RewriteRules或相对于目录,VirtualHost中的RewriteRules绝对是文件系统的根或DocumentRoot

重写示例:

RewriteCond %{REQUEST_FILENAME} !-f

应该是vhost:

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

rewriterule示例:

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

应该是vhost:

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