我的重写规则:
RewriteEngine On
RewriteRule ^popup/(.+)/$ /popup.php?name=$1 [L,QSA]
在本地,它运行良好,在$_GET中,我得到了具有期望值的变量"name"。但它在生产服务器上不起作用。我的$_GET是空的,但服务器在popup.php脚本上重定向我。
第1版:$_SERVER的var_dump在popup.php上有效:
SERVER_SOFTWARE => Apache/2.2.15 (CentOS)
SERVER_ADDR => 127.0.0.1
SERVER_PORT => 80
REMOTE_ADDR => 127.0.0.1
DOCUMENT_ROOT => /var/www/site.dom/htdocs
SERVER_ADMIN => root@localhost
SCRIPT_FILENAME => /var/www/site.dom/htdocs/popup.php
REMOTE_PORT => 60763
GATEWAY_INTERFACE => CGI/1.1
SERVER_PROTOCOL => HTTP/1.0
REQUEST_METHOD => GET
QUERY_STRING =>
REQUEST_URI => /popup/work/
SCRIPT_NAME => /popup.php
PATH_INFO => /work/
PATH_TRANSLATED => redirect:/parse_request.php/
PHP_SELF => /popup.php/work/
PATH_TRANSLATED是什么意思?
这是由于web服务器上的选项MultiViews
造成的。在.htaccess的顶部添加此行以禁用它:
Options -MultiViews
选项MultiViews
由在mod_rewrite
之前运行的Apache's content negotiation module
使用,并使Apache服务器匹配文件的扩展名。所以/file
可以在URL中,但它将为/file.php
服务,从而取代您的重写规则。