我不擅长重写规则所以..可怜我>_>
我想让这两个规则一起工作..基本上我想在使用 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>
我还没有测试过这个,所以我不知道..但我非常怀疑我是否正确。
编辑:只是为了澄清一下,我并不是说需要成为一条规则,但它们会按预期一起工作吗?
最佳答案
这应该没问题,因为您的第一条规则被标记为 [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]
关于apache - 组合两个 mod_rewrite 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4250585/