apache - 组合两个 mod_rewrite 规则

标签 apache .htaccess mod-rewrite url-rewriting

我不擅长重写规则所以..可怜我>_>

我想让这两个规则一起工作..基本上我想在使用 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/

相关文章:

php - include_path fatal error xampp

php - 使用 PHP 的 apache 日志文件的另一个正则表达式

html - SEO:hreflang 无法正常工作 - 我该如何解决?

php - Apache Mod Rewrite : RewriteRule with L argument. 怎么了?

html - 拒绝访问 css/和 js/文件夹或使用 htaccess 重定向/重写到 index.html

PHP 在浏览器中返回错误 500,但在 shell 中不返回

apache - 无需在浏览器上安装受信任的 CA 证书的 HTTPS

php - 子目录中的 Wordpress 克隆

javascript - 使用 PHP 将简单的 HTML 表单写入 SQL DB,遭到机器人攻击

regex - 如何使用 mod_rewrite 从旧的 php 脚本重定向到新的 php 脚本