.htaccess将非www重写为www,除了特定的动态页面

时间:2014-01-07 23:19:54

标签: regex .htaccess mod-rewrite joomla

我已经在这里和其他地方查看了无数的答案,但没有找到我需要的东西......我正在使用旧的Joomla 1.5网站,而不是根据业主的具体要求使用SEF。但是我希望所有非www请求都被重写为www,除了特定的表单/支付页面。

Example: 
http://domain.com/index.php?option=com_content&view=article&id=43&Itemid=11 
becomes
http://www.domain.com/index.php?option=com_content&view=article&id=43&Itemid=11
except a payment page
http://domain.com/index.php?option=com_rsform&formId=3
or 
http://www.domain.com/index.php?option=com_rsform&formId=3
becomes
https://domain.com/index.php?option=com_rsform&formId=3

我正在使用此代码:

RewriteEngine On

########## Begin - Redirect non-https non-www to www
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=302,L]
########## End - Redirect non-www to www

只要他们坚持我的付款页面链接,这就让我在那里,但我想要万无一失。并更好地了解如何做到这一点。我已经厌倦了一百种不同的规则 - 我正在努力学习正则表达式问题,但无法及时为我的客户提供。

我可以在任何表单上工作,因此“option = com_rsform”将始终在url中。我不知道在制作条件时是否将其视为字符串或变量..无论如何,我真的很感激建议的解决方案。

1 个答案:

答案 0 :(得分:2)

试试这段代码:

RewriteEngine On

########## Begin - Redirect non-https non-www to www
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{QUERY_STRING} !^option=com_rsform&formId=3 [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=302,L]
########## End - Redirect non-www to www

# payment URL
RewriteCond %{HTTPS} off
RewriteCond %{QUERY_STRING} ^option=com_rsform&formId=3 [NC]
RewriteRule ^(.*)$ https://domain.com/$1 [R=302,L]