可能重复:
My web host is adding ?PHPSESSID=fgh2h45… to the end of the URL
How I can remove PHPSESSID in Symfony2
我使用Symfony 2开发了我的网站,所以我尝试从URL中删除PHPSESSID,并将这个代码放入/web/.htaccess:
SetEnv SHORT_OPEN_TAGS 0
SetEnv REGISTER_GLOBALS 0
SetEnv MAGIC_QUOTES 0
SetEnv SESSION_AUTOSTART 0
SetEnv ZEND_OPTIMIZER 1
SetEnv PHP_VER 5_4
DirectoryIndex app.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
#remove PHPSESSID
RewriteCond %{QUERY_STRING} PHPSESSID=.*$
RewriteRule .* %{REQUEST_URI}? [R=301,L]
</IfModule>
然后我注意上面的代码禁用了PHPSESSID,但它产生了另一个问题,我的app.php出现在我网站的所有网址中:
www.mysite.com/app.php/.....
所以我不知道我能做什么,我想我有新问题,因为我使用了多个RewriteRule。
答案 0 :(得分:4)
不是重写URL以删除PHPSESSID
,而是将php配置为使用cookie进行会话:
php.ini
中的:
session.use_cookies=1
session.use_only_cookies=1
session.use_trans_sid=1
或.htaccess
:
php_flag session.use_cookies 1
php_flag session.use_only_cookies 1
php_flag session.use_trans_sid 1
在php
中的OR - 在session_start()
之前的所有页面中包含的某个文件中:
<?php
ini_set("session.use_cookies", 1);
ini_set("session.use_only_cookies", 1);
ini_set("session.use_trans_sid", 1);
?>
最后但并非最不重要的是,不管怎样,让我们用mod_rewrite
执行此操作:
<IfModule mod_rewrite.c>
RewriteEngine On
# first, remove PHPSESSID and redirect
RewriteCond %{QUERY_STRING} ^(.*)PHPSESSID=[^&]*(.*)$
RewriteRule .* %{REQUEST_URI}?%1%2 [R=301,L]
# then, silently rewrite everything to app.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
这样,只删除PHPSESSID=smth
参数,查询字符串的其余部分将被传递。
答案 1 :(得分:0)
在执行从查询字符串中删除app.php
的重定向之前,您正在将URI 重写为 PHPSESSID
。您希望之前执行此操作,以便%{REQUEST_URI}
不会被重写。
尝试使用以下内容替换DirectoryIndex app.php
下的所有内容:
<IfModule mod_rewrite.c>
RewriteEngine On
# remove PHPSESSID first
RewriteCond %{QUERY_STRING} PHPSESSID=.*$
RewriteRule .* %{REQUEST_URI}? [R=301,L]
# rewrite to app.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>