Mod_Rewrite和段落标记(PilCrow)

时间:2013-06-10 13:20:30

标签: php apache .htaccess mod-rewrite

我建立了一个在开发中运行良好但在生产中无法正常工作的网站。我无法判断问题是否与.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&params=$5 [L]
RewriteRule ^([^/]+)(/)(.*) index.php?controller=$1&action=$3&params= [L]
RewriteRule ^([^/]+)(/) index.php?controller=$1&action=index&params= [L]
RewriteRule ^([^/]+) index.php?controller=$1&action=index&params= [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规则的问题吗?这看起来像服务器问题吗?我正在试图弄清楚我的头发。


编辑#1

我只是注意到在我的htaccess中,类似index.php?controller=$1&action=$3&params=的内容包含“& para”,它是pilcrow符号的HTML实体,可以完全理解为什么它变成符号后跟 MS = 即可。现在更大的问题是为什么htaccess会处理HTML实体?

编辑#2

好的,所以我一定是无知的。它显示的是因为我在浏览器中查看它。当我去“查看源代码”时,它以["QUERY_STRING"]=> string(41) "controller=index.php&action=index&params="的形式出现。好吧,现在要弄明白为什么它在$ 1变量中捕获文件名 index.php 。 HMM。

1 个答案:

答案 0 :(得分:0)

我无法解决我的问题所以我重新编写了所有内容,将所有值作为“资源”传递到我的.htaccess中:

RewriteRule ^(.*) index.php?resource=$1

然后在应用程序逻辑中我处理了所有处理。感谢您的观看。