我最近改变了我的托管。旧的服务器有php 5.3,而新的有php 5.6。主机的这种变化是使我的网站与PHP 7兼容的一步。
但是我遇到了htaccess重定向的问题。
我的htaccess文件如下所示
DirectoryIndex index.php
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^company/([0-9]+)/?$ company.php?company_id=$1 [L]
所以,当我使用网址mydomain.com/admin/company/92
我似乎无法根据需要获取重定向的网址,例如mydomain.com/admin/company.php?company_id=92
这是打印$_SERVER
[REDIRECT_SCRIPT_URL] => /admin/company/92/
[SCRIPT_FILENAME] => /htdocs/myproj/admin/company.php
[REDIRECT_URL] => /admin/company.php/92/
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /admin/company/92/
[SCRIPT_NAME] => /admin/company.php
[STATUS] => 200
[ORIG_PATH_INFO] => /92/
[ORIG_PATH_TRANSLATED] => /htdocs/myproj/admin/company.php
[PHP_SELF] => /admin/company.php
[argv] => Array
(
)
[argc] => 0
)
我在本地获得了php 5.3,同样的代码在我的本地工作正常。我该如何解决这个问题?
答案 0 :(得分:1)
这很可能是默认新主机启用选项MultiViews
的效果。
你可以这样关掉它:
DirectoryIndex index.php
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /admin/
RewriteRule ^company/([0-9]+)/?$ company.php?company_id=$1 [L,NC,QSA]
选项MultiViews
(请参阅http://httpd.apache.org/docs/2.4/content-negotiation.html)由Apache's content negotiation module
在 mod_rewrite
之前运行使用,并使Apache服务器匹配文件扩展名。因此,如果/file
是网址,那么Apache将提供/file.html
。