我已经搜刮了StackOverflow的答案,并看到许多问题接近,但没有任何工作对我来说呢。
我希望我的.htaccess应用不同的规则基于域调用它。 基本上,如果subdomain.example.com被击中,redirect到google.com。 如果本地主机被击中,redirect到yahoo.com。 如果www.example.com(或example.com)被击中,redirect到bing.com。
稍后我将添加实际的重写规则(设置环境variables和htpasswd保护),但首先我需要获得“if then”部分的工作。
我的(非工作)代码如下。 任何帮助是极大的赞赏。
redirect需要.htaccess帮助
特定文件的mod_rewriteexception
HTACCESS 404错误无法正常工作
如何阻止POST请求的IP,但不是GET?
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]
如何防止Apache / mod_rewrite将path视为具有相同名称的文件
如何将htaccess的子域redirect写入https
帮助编写一个htaccess
使用.htaccess从URL中删除特殊字符
如果您使用的是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>
你试图用[L,R = 301]标志将http://bing.com重写为%5BL,R = 301]而不是任何东西给http://bing.com 。 试试RewriteRule ^(.*)$ http://bing.com/ [L,R=301]
关于IF-ELSE:像这样在你的RewriteRule上使用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.
在上面的例子中,如果你的RewriteCOnd是匹配的,那么带有S标志的RewriteRule将跳过下面的指令,并在第N个跳过之后停止跳转,其中N在S = part之后定义。 这是你的ELSE部分。 N编号应该包含跳过IF部分的下一个RewriteRule。
由于跳过,它们是相反的。 如果你否定RewriteCond,那么他们正常的顺序是可以的。
以下是Apache文档中的原始示例: https : //httpd.apache.org/docs/2.2/rewrite/flags.html#flag_s
编辑:尝试这样的事情:
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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。