尝试为Apache负载均衡器声明自定义cookie时出错

时间:2014-04-24 05:46:35

标签: php apache .htaccess session cookies

我已经遵循了一些教程(例如http://www.markround.com/archives/33-Apache-mod_proxy-balancing-with-PHP-sticky-sessions.html/)并设置了一个Apache负载均衡器,除了会话支持外,它的工作正常。

我正在尝试修改我的重定向(直到我添加额外标志(?):

RewriteRule ^(.*)$ public_html/index.php - [CO=JSESSIONID:balancer.view-a:.ea-hq.com]

这会导致内部服务器错误:

C:/Web Server/Apache24/htdocs/.htaccess: RewriteRule: bad flag delimiters

因此,我的会话不会保留在两台服务器之间。

我在Windows服务器2013上使用Apache 2.4和PHP 5.5.11。

我该如何解决这个问题?

如果您需要我提供更多详细信息,请说明。


我做了改变:

RewriteRule ^(.*)$ - [CO=JSESSIONID:balancer.view-a:.ea-hq.com]
RewriteRule ^(.*)$ public_html/index.php

但现在很多文件都没有加载,状态为302"发现"通过Chrome中的检查器查看它们时是空白的。


RewriteRule ^(.*)$ public_html/index.php [CO=JSESSIONID:balancer.view-a:.ea-hq.com]

给我同样的结果。


这是我没有修改cookie的完整.htaccess文件:

Options +FollowSymLinks
IndexIgnore */*
<FilesMatch "\.(ico|pdf|flv|jpe?g|png|gif|js|css|swf|eot|woff|ttf|svg)$">
    ExpiresActive On
    ExpiresDefault "access plus 1 year"
</FilesMatch>
RewriteEngine On
RewriteBase /

# Ignore rule if the real path exists, use that instead.
RewriteCond %{REQUEST_FILENAME} !-f 
# Only use the filename and extension.
RewriteRule ^(?:[^/]+/)*([^.]+\.(?:gif|jpe?g|png|eot|woff|ttf|svg))$ public_html/images/$1 [R,L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/importers
RewriteCond %{REQUEST_URI} !\.(gif|jpg|png)$

RewriteRule ^(.*)$ public_html/index.php

# Use below when apache is upgraded.
#FallbackResource public_html/index.php

#php_flag session.bug_compat_42 1
#php_flag session.bug_compat_warn 0


<IfModule mod_security.c>
SecRuleEngine Off
</IfModule>

1 个答案:

答案 0 :(得分:2)

RewriteRule需要2或3个参数,您的命令有4个参数

正确的语法是

  • 命令: RewriteRule
  • 模式: ^(。*)$
  • 替换 -
  • 标志: [CO = JSESSIONID:balancer.view-a:.ea-hq.com]

错误只与语法有关,指定替换为public_html / index.php和 - (破折号)。

(来自文档)破折号( - )表示不应执行替换(现有路径未经过修改)。当需要在不改变路径的情况下应用标志时使用。

所以我认为你只需要一个破折号而不是public_html / index.php(你可以分开编写其他规则)。

例如

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /public_html/index.php/$1 [L,CO=JSESSIONID:balancer.view-a:.ea-hq.com]

查看apache documentation了解更多信息