Problem detecting empty REQUEST_URI with Apache mo

2019-02-10 02:14发布

I am running Apache witha redirect rule like this:

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

This successfully redirects http://1st-domain.com to http://2nd-domain.com However, when the REQUEST_URI is empty, I want to redirect to a third domain.

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

But this does not work and instead redirects to 2nd-domain.com

My rules are ordered like this:

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]

Any suggestions? Thank you in advance.

UPDATE

  1. Empty REQUEST_URI: http:/1st-domain.com
  2. Non-empty REQUEST_URI: http://1st-domain.com/something

The first rule should direct an empty request_uri to 3rd-domain.com, the second rule should direct the non-empty request_uri to 2nd-domain.com

USEFUL TIDBIT You can turn on mod_rewrite debug with this snippet:

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

Very useful debug option I hadn't known.

8条回答
Root(大扎)
2楼-- · 2019-02-10 03:14

Your rules redirects request with empty QUERY_STRING.

For empty request_uri, you can use

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

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

The first rule will first match <empty>, then tests for <non-empty or empty> (which can't be <empty> now since we've processed it before)

查看更多
beautiful°
3楼-- · 2019-02-10 03:19

On multisites such redirection works for me for empty requests :

RewriteCond %{HTTP_HOST} ^1st-domain\.com$
RewriteCond %{REQUEST_URI} "^/$"
RewriteRule ^$ http://3rd-domain.com/ [R=permanent,L]
查看更多
登录 后发表回答