apache - 使用 Apache mod_rewrite 检测空 REQUEST_URI 时出现问题

标签 apache url mod-rewrite url-rewriting

我正在使用如下重定向规则运行 Apache:

RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com$1 [R=permanent,L]

这成功重定向 http://1st-domain.comhttp://2nd-domain.com 但是,当 REQUEST_URI 为空时,我想重定向到第三个域。

RewriteCond %{HTTP_HOST} ^1st-domain\.com$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://3rd-domain.com$1 [R=permanent,L]

但这不起作用,而是重定向到 2nd-domain.com

我的规则是这样排序的:

RewriteCond %{HTTP_HOST} ^1st-domain\.com$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://3rd-domain.com$1 [R=permanent,L]

RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.*)$ http://2nd-domain.com$1 [R=permanent,L]

有什么建议吗?预先感谢您。

更新

  1. 空 REQUEST_URI:http://1st-domain.com
  2. 非空REQUEST_URI:http://1st-domain.com/something

第一条规则应将空 request_uri 定向到 3rd-domain.com,第二条规则应将非空 request_uri 定向到 2nd-domain.com

有用的花絮 您可以使用以下代码片段打开 mod_rewrite 调试:

<IfModule mod_rewrite.c>
RewriteLog "/home/domain.com/logs/rewrite.log"
RewriteLogLevel 3
</IfModule>

非常有用的调试选项,我以前不知道。

最佳答案

这应该有效:

RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^$ http://3rd-domain.com [R=permanent,L]

RewriteCond %{HTTP_HOST} ^1st-domain\.com
RewriteRule ^(.+)$ http://2nd-domain.com/$1 [R=permanent,L]

希望对你有帮助!

注意:httpd.conf 和 .htaccess 之间的 REQUEST_URI 略有不同,它以 httpd.conf 中的额外反斜杠开头。这意味着在 httpd.conf 中,第一个重写规则应该是 ^\/$,而不仅仅是 ^$

关于apache - 使用 Apache mod_rewrite 检测空 REQUEST_URI 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684940/

相关文章:

linux - 如何在 solr 中配置 IndexBasedSpellChecker?

wordpress - .htaccess 重定向在 Apache 上的 WordPress 3.5.1 中不起作用

c# - URL unicode参数解码C#

linux - 将特定传出 url 重新路由到另一个 url - linux ubuntu 16.04

.htaccess - 使用 .htaccess 清理 URL

apache - 使用 mod_rewrite 重定向到 Apache 内置 404 页面?

php - 如何使用 .htaccess 隐藏网页名称后的所有内容

apache - 如何配置 Apache 只代理一个文件?

apache - 为什么RewriteCond%{REQUEST_FILENAME}!-d是必需的?

url - 如何在 webapp 中获取 google script webapp 的 URL