Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache “如何写作”;“如果……否则”;mod_重写.htaccess中的语句_Apache_.htaccess_.htpasswd - Fatal编程技术网

Apache “如何写作”;“如果……否则”;mod_重写.htaccess中的语句

Apache “如何写作”;“如果……否则”;mod_重写.htaccess中的语句,apache,.htaccess,.htpasswd,Apache,.htaccess,.htpasswd,我已经搜索了StackOverflow的答案,看到很多问题都很接近,但我还没有找到任何解决办法 我想让我的.htaccess根据调用它的域应用不同的规则。基本上,如果subdomain.example.com被点击,重定向到google.com。如果点击了localhost,请重定向到yahoo.com。如果点击了www.example.com(或example.com),请重定向到bing.com 稍后我将添加实际的重写规则(设置环境变量和htpasswd保护),但首先我需要让“if-then

我已经搜索了StackOverflow的答案,看到很多问题都很接近,但我还没有找到任何解决办法

我想让我的
.htaccess
根据调用它的域应用不同的规则。基本上,如果subdomain.example.com被点击,重定向到google.com。如果点击了localhost,请重定向到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]
编辑:根据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]
您正在尝试重写到[L,R=301],而不是使用[L,R=301]标志重写到。请尝试
RewriteRule^(.*)$http://bing.com/ [L,R=301]

关于IF-ELSE:在重写规则上使用S标志,如下所示:

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteRule .? - [S=<here comes the number of your directives in the "else" part>]
# Here comes your ELSE part:
# Etc. etc.
RewriteRule .? - [S=<here comes the number of your directives in the "if" part>]
# Here comes your IF part.
RewriteEngine On

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

RewriteCond %{HTTP_HOST} !^localhost$
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$
RewriteRule .? - [S=1]
RewriteRule ^(.*)$ /index.php/$1 [L]

如果您使用的是Apache2.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>

AuthName“文件受保护,请输入您正常的网站电子邮件和密码”
AuthType Basic
AuthUserFile/home/sites/mysite.co.uk/.htpasswd
需要有效用户
重新启动发动机
重写规则^(.*)$https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301]

您链接到的原始Apache示例首先显示IF语句,然后显示ELSE语句,因此它们是按常规顺序排列的。你说他们应该按相反的顺序。为什么?我已经尝试了你(和Apache示例)的建议,但仍然没有成功。我的更新代码在我的原始问题上面。有什么想法吗?因为在那个例子中,选中的表达式是否定的。他们说那里-d在哪里!是否定。这就像说:如果(我不想要的){//be sad}其他{//be happy}而不是如果(我想要的){//be happy}其他{//be sad}你为什么要加入
RewriteCond%{REQUEST_FILENAME}-f
?是否要检查请求的URL是否不是现有文件?你不能用它来否定你以前的重写。您必须输入
在第一个中。就像
RewriteCond%{HTTP\u HOST}^subdomain\.domain\.com$
我不明白为什么这很重要。if(false){do this for false;}else{do this for true;}与if(true){do this for true;}else{do this for false;}相同,因为if的操作紧跟在if之后。这就是我在上面编辑的例子中所提到的。事实上,你的问题已经得到了回答,但你还有其他的错误配置问题,我也试图提供帮助。