0

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

这是有效的 - 但 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 是 url ......并且 '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,它仍然在重定向,我无法摆脱这种行为。

4

1 回答 1

1

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

在您的情况下,请尝试将您的重写规则剪切并粘贴到<Directory "C:/wwwroot/x/_my_logs/" >

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

重写示例:

RewriteCond %{REQUEST_FILENAME} !-f

应该在虚拟主机中:

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

重写示例:

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

应该在虚拟主机中:

RewriteRule (.*) index.php?_req=$1 [L]
于 2012-08-11T07:24:28.300 回答