问题描述
||
我在.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的一种不可预测的神秘方式,这无疑是一个令人恐惧的生活场所。我现在知道这个问题,谢谢:-)