2011-09-01 155 views
2

内容管理系统通常强制页面通过index.php路由。内容管理系统(CMS)强制SSL/https://使用.htaccess

例如,我使用的CMS上的页面显示在URL中,如下所示。

http://www.my-domain.co.uk/index.php?page=263 

的代码的.htaccess我知道只有听我发言的index.php文件的一部分。

我现在的重写代码如下:

RewriteEngine On 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^login/?$ https://www.my-domain.co.uk/login [R=301,L] 

这工作,因为它是一个特定的目录,但是,

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^index.php?page=263$ https://www.my-domain.co.uk/index.php?page=263 [R=301,L] 

似乎并没有工作。

任何想法?

+0

有你的最后一条规则了几个问题。 RewriteRule的第一个参数是一个正则表达式,所以?有特殊的意义。另外,我很确定它只查看URL的路径部分,而不是查询字符串。试试'^ index \ .php $'。 –

+0

Hi @Sean这个想法似乎看起来朝着正确的方向,但是这又会将所有的URL请求重新写入HTTPS。因为cms中的所有页面都通过index.php脚本。 我假设\具有与vb#脚本相同的功能,它规定以下字符应该被视为已写入,并应忽略任何特殊含义? 如果是这种情况,我可以写它作为索引\ .php \?page = 263 $ – Josh

回答

0

我有我从某个网页复制的代码段。也许你可以试试看?

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
+0

嗨@aesphere这个答案不重写所有我的URL请求到https? – Josh

1
  1. 重写规则非常符合URL的path部分,所以它需要只是^index\.php$
  2. 可以使用RewriteCond %{QUERY_STRING}来匹配查询字符串。
  3. 就像在aesphere的答案中一样,测试特殊的%{HTTPS}变量比检查端口更容易。
  4. 使用绝对目标URI意味着[R=301,L],因此您可以将其删除。
  5. [QSA]追加查询字符串

所以,你最终获得:

RewriteCond %{HTTPS} off 
RewriteCond %{QUERY_STRING} ^\?page=263$ 
RewriteRule ^index\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [QSA]