【发布时间】:2017-08-13 04:46:57
【问题描述】:
假设有两个重写规则我想通知浏览器:
- 删除 www 前缀(
http://www.example.org到http://example.org) - 删除 index.php(
http://example.org/index.php到http://example.org)
我想同时应用这两个规则,并且我希望任何一个规则都导致 301 重定向。如果两个规则都匹配,我希望只有一个 301 重定向。
问题是,当一个规则有一个[R] 标志时,我还必须根据Apache documentation 指定一个[L](最后一个)标志来配合它。
您几乎总是希望将 [R] 与 [L] 结合使用(即使用 [R,L]),因为 [R] 标志本身会将 http://thishost[:thisport] 附加到 URI,但随后将此传递给规则集中的下一条规则,这通常会导致“请求中的 URI 无效”警告。
是否有任何变通方法可以让两个规则都不会导致 2 次重定向?
RewriteEngine On
# Naked domains
RewriteRule ^/?(.*)$ http://example.org/$1 [R=301,L]
# Remove index.php
RewriteRule ^index.php/(.*)$ /$1 [R=301,L]
【问题讨论】:
标签: apache .htaccess mod-rewrite