我糟透了重写规则,所以..同情我> _>
我想让这两个规则一起工作..基本上我想在每次使用时删除www,然后将所有请求发送到带有GET变量的index.php,如果域后面的东西..
例如:www.example.com和www.example.com/foo将分别转到example.com和example.com/foo。
下面我要合并的内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?token=$1 [QSA,L]
</IfModule>
我没有对此进行过测试,所以我不知道......但我非常怀疑我是否正确。
编辑:只是为了澄清,我不是说需要成为一条规则,但是它们会按预期一起工作吗?
答案 0 :(得分:3)
这应该没问题,因为您的第一条规则标记为[L] Last和[R] Redirect - 因此两条规则不必同时处理。第一个将处理,重定向,清除第一个,然后第二个处理。
您可以使用[C]将条件链接在一起 - 这意味着如果第一个条件通过,则尝试下一个条件,但如果第一个条件失败则会跳过所有链接的子条件。我不认为这就是你想要的。如果有的话,你需要一个[OR]指令。
你的重写看起来不错,除了可能是最后一个,如果你将它用于CodeIgniter网站 - 通常看起来像:
RewriteRule ^(.*)$ index.php?/$1 [L]
作为最佳做法,您应该在test-subdomain.example.com上设置一个重复的网站,这样您就可以在尽可能接近实际环境的情况下摆弄这样的事情。
发表评论:如果你想通配域名,只需:
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.com$ [NC]
RewriteRule ^[^.]+.([^.]+).com/(.*)$ http://$1.com/$2 [R=301,L]
答案 1 :(得分:0)
通常情况下,复杂网站可以在.htaccess
文件中包含数百个规则,每个规则都有自己的RewriteCond
集。没有必要将它们合并为一些无所不包的规则。