如何在.htaccess中编写“ if ... else” mod_rewrite语句

Tim*_*ahn 3 apache .htaccess .htpasswd

我一直在寻找StackOverflow的答案,并看到许多问题即将解决,但目前还没有任何解决方法。

我想.htaccess根据调用它的域应用不同的规则。基本上,如果subdomain.example.com被点击,则重定向到google.com。如果找到本地主机,则重定向到yahoo.com。如果点击了www.example.com(或example.com),请重定向至bing.com。

稍后,我将添加实际的重写规则(设置环境变量和htpasswd保护),但是首先我需要使“ if then”部分起作用。

我的(无效)代码如下。任何帮助是极大的赞赏。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteRule http://google.com/ [L,R=301]

RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule http://yahoo.com/ [L,R=301]

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule http://bing.com/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)

编辑:根据下面的Barta的评论更新了(但仍然无法使用)代码。

RewriteEngine On

RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? - [S=1]
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{HTTP_HOST} ^localhost$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? - [S=7]
RewriteRule ^(.*)$ /subdir/www/index.php/$1 [L]
RewriteRule ^ - [E=MYSQL_DB_HOST:localhost]
RewriteRule ^ - [E=MYSQL_DB_NAME:XXX]
RewriteRule ^ - [E=MYSQL_USERNAME:XXX]
RewriteRule ^ - [E=MYSQL_PASSWORD:XXX]
RewriteRule ^ - [E=BASE_URL:XXX]
RewriteRule ^ - [E=ENVIRONMENT:XXX]

RewriteCond %{HTTP_HOST} ^example\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? - [S=1]
RewriteRule ^(.*)$ /index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)

小智 5

如果您使用的是Apache 2.4,则可能会发现这很有用。

我的服务器HTTPS通过HTTPS进行连接时会设置环境变量,尽管可以通过不同的方式进行设置。我的目标是强制进行HTTP身份验证,但仅在安全连接上进行,并将非安全连接重定向到安全位置。

<If "%{HTTPS} == 'on'">
  AuthName "Files are protected, enter your normal website email and password"
  AuthType Basic
  AuthUserFile /home/sites/mysite.co.uk/.htpasswd
  Require valid-user
</If>
<Else>
  RewriteEngine On
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</Else>
Run Code Online (Sandbox Code Playgroud)