我建立了一个在开发中运行良好但在生产中无法正常工作的网站。我无法判断问题是否与.htaccess或未正确配置的vhost有关。从本质上讲,问题在于我的自定义框架中的URL重写,它依赖于名为控制器和操作的URL参数。访问 domain.com/account/new 等网址会重写为 domain.com/index.php?controller=account&action=new 。相反,当我在引导程序的最开始(在任何应用程序逻辑有机会弄乱任何东西之前)转储$_SERVER
全局时,我收到了这个:
["QUERY_STRING"]=> string(41) "controller=index.php&action=index¶ms="
那个pilcrow(段落标记)来自哪里?我尝试它的URL无关紧要仍然是这样。
注意:同一服务器上的其他网站可以毫无问题地进行网址重写。它似乎只是这一个。
我已验证mod_rewrite模块已加载并显示在 php -i / phpinfo()
中。
这是我的.htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^([^/]+/)*favicon\.ico$ assets/img/favicon.ico [L,NC]
RewriteCond %{REQUEST_URI} ^/assets.*$
RewriteRule ^(.*)$ - [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !favicon\.ico
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(/)([^/]+)(/)(.*) index.php?controller=$1&action=$3¶ms=$5 [L]
RewriteRule ^([^/]+)(/)(.*) index.php?controller=$1&action=$3¶ms= [L]
RewriteRule ^([^/]+)(/) index.php?controller=$1&action=index¶ms= [L]
RewriteRule ^([^/]+) index.php?controller=$1&action=index¶ms= [L]
开发环境:
MacOS 10.7
Apache 2.2.22
PHP 5.4.15
生产环境:
Linux (Kernel 2.6.32)
Apache 2.2.3
PHP 5.3.3
TL; DR; 我的.htaccess规则重写错误,包括一个pilcrow(段落标记),后跟“ms =”。这是我的htaccess规则的问题吗?这看起来像服务器问题吗?我正在试图弄清楚我的头发。
我只是注意到在我的htaccess中,类似index.php?controller=$1&action=$3¶ms=
的内容包含“& para”,它是pilcrow符号的HTML实体,可以完全理解为什么它变成符号后跟 MS = 即可。现在更大的问题是为什么htaccess会处理HTML实体?
好的,所以我一定是无知的。它显示的是因为我在浏览器中查看它。当我去“查看源代码”时,它以["QUERY_STRING"]=> string(41) "controller=index.php&action=index¶ms="
的形式出现。好吧,现在要弄明白为什么它在$ 1变量中捕获文件名 index.php 。 HMM。
答案 0 :(得分:0)
我无法解决我的问题所以我重新编写了所有内容,将所有值作为“资源”传递到我的.htaccess中:
RewriteRule ^(.*) index.php?resource=$1
然后在应用程序逻辑中我处理了所有处理。感谢您的观看。