我在.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;没有用,有人有想法吗?
答案 0 :(得分:0)
latest (apache 2.2) documentation of mod_rewrite现在明确说明应该避免使用位置指令(在页面中搜索位置)。您可以在the users httpd mailing list上看到一些有趣的邮件。但是,例如in the 2.0 documentation没有说明这一点。
虽然在语法和句子中允许重写规则,但这绝不是必需的,也是不受支持的。
所以看起来你正处于一种神秘的不可预知的运行mod-rewrite的方式,这当然是一个令人恐惧的生活场所。谢谢你,我现在知道这个问题: - )