与httpd.conf相比,将代码放入.htaccess时,结果不同

问题描述

|| 我在.htaccess文件中包含以下代码:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?pic=$1
正是我想要它做什么。如果访问mydomain.com/345,则与输入mydomain.com/index.php?pic=345的方式相同,并且print_r($ _ GET)返回以下内容:
Array ( [pic] => 345 )
但是,当我尝试将确切的代码放入预编译的conf文件而不是.htaccess文件时,它将返回文件的完整内部路径,包括$ _GET参数,如下所示:
Array ( [pic] => var/www/mydomain.com/htdocs/345 )
当然,我可以获取该字符串的最后一部分,或者使用REQUEST_URI来获取数据,但这并不能解决问题,而只是解决它。有人知道它为什么这样做吗?我猜这与它在内部编译路径有关吗? 这是完整的conf文件,以备您需要时使用,我只关闭了域名以保持中立。 :-)
<VirtualHost *:80>
    ServerAdmin info@mydomain.com
    ServerName mydomain.com

    # Indexes + Directory Root
    DirectoryIndex index.php
    DocumentRoot /var/www/mydomain.com/htdocs/

    # CGI Directory
    ScriptAlias /cgi-bin/ /var/www/mydomain.com/cgi-bin/
    <Location /cgi-bin>
            Options +ExecCGI
    </Location>

    # Logfiles
    ErrorLog /var/www/mydomain.com/logs/error.log
    CustomLog /var/www/mydomain.com/logs/access.log combined

    <Location />
           RewriteEngine On
           RewriteCond %{REQUEST_FILENAME} !-f
           RewriteCond %{REQUEST_FILENAME} !-d
           RewriteRule ^(.*)$ index.php?pic=$1
    </Location>
</VirtualHost>
编辑 我通过以下方式“解决”了它:
<Location />
有了这个:
<Directory /var/www/mydomain.com/htdocs>
但是,我仍然好奇为什么不起作用,有人知道吗?     

解决方法

        现在,最新的(apache 2.2)mod_rewrite文档明确指出应避免使用位置指令(在页面中搜索位置)。您可以在用户httpd邮件列表上看到一些有趣的邮件。但是,2.0文档中并未对此进行说明。   尽管在和节中在语法上允许使用重写规则,但这永远是不必要的,不受支持。 因此,看来您处于运行mod-rewrite的一种不可预测的神秘方式,这无疑是一个令人恐惧的生活场所。我现在知道这个问题,谢谢:-)     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...