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

时间:2011-06-12 14:25:26

标签: apache mod-rewrite

我在.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>

但是,我仍然很好奇为什么&lt; Location /&gt;没有用,有人有想法吗?

1 个答案:

答案 0 :(得分:0)

latest (apache 2.2) documentation of mod_rewrite现在明确说明应该避免使用位置指令(在页面中搜索位置)。您可以在the users httpd mailing list上看到一些有趣的邮件。但是,例如in the 2.0 documentation没有说明这一点。

  

虽然在语法和句子中允许重写规则,但这绝不是必需的,也是不受支持的。

所以看起来你正处于一种神秘的不可预知的运行mod-rewrite的方式,这当然是一个令人恐惧的生活场所。谢谢你,我现在知道这个问题: - )