因此,在我的主域“domain.com”上,我从 cPanel 创建了几个子域,例如“sub1.domain.com”和“sub2.domain.com”。它们在服务器上的真实位置在“domain.com/sub1”和“domain.com/sub2”中。
现在,我想使用 .htaccess 将非 www 重定向到 www,这就是我目前拥有的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [L,R=301]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
这有效。当有人输入 domain.com 时,它将被重定向到 www.domain.com。但是,当有人输入 sub1.domain.com 时,他将被重定向到 www.domain.com/sub1 - 我不想要它,它需要在 sub1.domain.com 中。
我应该在 .htaccess 文件中添加什么来完成这个?
我在同一个 ip 和同一个文档根目录上安装了两个虚拟主机,因为我想在文档根目录中使用共享文件和内容。
我希望我的第二个网站指向文档根目录的子文件夹
http://example.com Loads http://example.com/subfolder
Run Code Online (Sandbox Code Playgroud)
我在 .htaccess 中尝试了各种重写规则,它们都可以重定向,但在 url 中维护子文件夹,我不喜欢我的意思是 url 将是
http://example.com/subfolder
Run Code Online (Sandbox Code Playgroud)
虽然我想要
http://example.com
Run Code Online (Sandbox Code Playgroud)
这些是我尝试过的
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RedirectMatch ^/$ http://example.com/subfolder
Run Code Online (Sandbox Code Playgroud)
或者
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(.*)$ /subfolder/$1 [L]
Run Code Online (Sandbox Code Playgroud)
第二个也给出了 500 内部服务器错误,我该怎么办?
我正在创建一个网关页面,根据访问者使用的服务重定向访问者。
如果访问者具有源自域 accounts.google.com 的 cookie,则重定向访问者的 .htaccess 规则应该是什么样的?
RewriteEngine On
RewriteCond %{REQUEST_URI} /ingoing*$
RewriteCond %{HTTP_COOKIE} ?? WHAT SHOULD I PUT HERE ??[NC]
RewriteRule . example.com/outgoing [R,L]
Run Code Online (Sandbox Code Playgroud) 只是想知道 SNI 是否有助于将公共内容与私人内容分开。通过指定仅从 Intranet 解析的主机名,我设法将我们的服务器配置为/foo为每个客户端提供服务,但/bar仅为来自 Intranet 的客户端提供服务。
所以配置如下:(剥离到非常重要的部分)
NameVirtualHost *:443
# JkWorkersFile must be global so including it here
JkWorkersFile workers.properties
<VirtualHost *:443>
ServerName public.foo.com
JkMountFile uriworkermap-pub.properties
</VirtualHost>
<VirtualHost *:443>
ServerName private-foo
JkMountFile uriworkermap-priv.properties
</VirtualHost>
<VirtualHost *:443>
ServerName 10.1.2.3
JkMountFile uriworkermap-priv.properties
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
问题是,如果您将该名称添加到您的hosts文件中以解析为公共 IP,那么 SNI 实际上将解析处理它,就像它是来自 Intranet 的有效请求一样。
我考虑过只使用数字 IP 而不是名称(例如10.1.2.3)的想法,但我认为如果客户端在他们自己的子网中具有相同的 IP(例如,将端口转发到我的网络的公共 IP 的 Linux 主机),同样可以被欺骗服务器。
该节点位于我没有影响的防火墙后面。它只有一个 IP(内部 IP),但如果需要,我可以将其设为两个。
实际问题是:如何防止这种泄漏?例如通过htaccess?通过指定不同的 IP 地址?或者除了创建单独的服务器实例并忘记 SNI 之外没有其他方法吗?
如何使用 mod_rewrite 删除 ? (问号)在 URL 中?
例如:
http://127.0.0.1/ALL_FILES.php?test=1
Run Code Online (Sandbox Code Playgroud)
mod_rewrite 后:
http://127.0.0.1/ALL_FILES.php
Run Code Online (Sandbox Code Playgroud)
对于 php,这意味着 $_GET 超级全局变量将始终为空。
我想使用 Apache 将多个目录映射到同一位置,期待与此类似的行为:假设该/static位置由目录/srv/static1和/srv/static2. 然后,如果/static/image.png被要求,我希望 Apache 以该顺序检查文件/srv/static1/image.png和/srv/static2/image.png。返回找到的第一个文件;如果两者都未找到,则发回经典错误 404。
当然,一种解决方案是使用脚本创建一个指向正确位置的符号链接目录并使用该目录,例如在Alias指令中。我想知道是否有更直接的方法不需要我部署额外的机器。
谢谢!
我正在尝试使用 mod_rewrite 创建一个宁静的 API。
我有一个规则:
RewriteRule v2/(.*)$ v1/index.php?request=$1 [QSA,NC,L]
Run Code Online (Sandbox Code Playgroud)
然而,路径可能包含 base64 编码的字符串(即可以有 + 或 /)并且它们在到达 PHP 之前被解码。
例如,如果我去
/v2/cards/9VwQLli%2Bf0ogFl19AVRFLuztbp8cP0rYCgXBu3H9%2BDc%3DBe
Run Code Online (Sandbox Code Playgroud)
PHP 获取$_REQUEST['request']为cards/9VwQLli f0ogFl19AVRFLuztbp8cP0rYCgXBu3H9 Dc=Be'.
更糟糕的是,如果我在其中添加斜杠(例如9VwQLli%2Bf0ogFl19AVRFLuztbp8c%2FP0rYCgXBu3H9%2BDc%3DBe-%2F是斜杠),我会得到 404。
我怎样才能防止这种情况发生?
注意:我尝试了B和NE标志,但它们没有任何效果。我想作为一个黑客,我可以将所有+字符_都转换/为-,或者甚至是双 url 编码,但我想知道是否有更好的方法。
在浏览器的 url 栏中键入 localhost 时,它会正确重定向到https://localhost,但是我的代码中用于加载文件的所有调用http都不会被重定向或重写到https. 例如:
<link rel="stylesheet" type="text/css" href="http://static/css/colwidth.min.css">
Run Code Online (Sandbox Code Playgroud)
我Redirect permanent / https://localhost/在 Apache 配置文件VirtualHost部分中尝试过RewriteRule,我也尝试过.htaccess
Firefox我得到的错误是:
阻止加载混合活动内容“
http://static/css/colwidth.min.css”
我将不胜感激帮助了解如何与做既Apache的配置和.htaccess(我知道.htaccess是不是首选方法-但我还是想知道为什么它不工作)
网址:
<VirtualHost *:80>
ServerAdmin me@localhost
DocumentRoot "D:/Website/path/to/root"
ServerName localhost
Redirect permanent / https://localhost/
<Directory "D:/Website/path/to/root">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require ip 127.0.0.1
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin me@localhost
DocumentRoot "D:/Website/path/to/root"
ServerName …Run Code Online (Sandbox Code Playgroud) 仅当此目录中的文件不存在时,如何使 RewriteCond+RewriteRule 将 site1.com/folder1 更改为 site2.com/folder1。例如:site1.com/wp-content/uploads/2014/03/image.jpg
如果图像 site1.com/wp-content/uploads/2014/03/image.jpg 不存在,则获取 site2.com/wp-content/uploads/2014/03/image.jpg 但如果图像存在,则不要什么都不做。
更新,这里是我需要的代码,感谢大家的帮助)
Options +FollowSymLinks
RewriteEngine ON
RewriteCond %{REQUEST_URI} "/uploads/"
RewriteCond %{REQUEST_FILENAME} .*\.(jpeg|jpg|gif|png)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+) http://site2.com/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud) 我刚刚发现 flashsale.info 指向我的服务器。我如何阻止这种情况发生?有什么我可以做的吗?
我只需要在 Apache 2.4 中将http://example.org/重定向到http://www.something-other.org/ 。
只是主页。没有其他的。即http://example.org/?page=blog或http://example.org/contact.html不应重定向。
我所能找到的就是将页面完全重定向到另一个网站,例如:
Redirect "/" "http://www.something-other.org/"
Run Code Online (Sandbox Code Playgroud)
这更好一点:
RewriteEngine On
RewriteRule ^/$ http:// www.something-other.org/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)
它仅重定向主页,而且如果有查询字符串也会重定向。
我有一个带有多个域的服务器。我只想将一个“site-internet.com”重定向到 ssl 配置。
我想做:
这是我的 apache conf 文件
NameVirtualHost *:80
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^test.site-internet\.com$[NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ http://test.site-internet.com/$1 [NC,R=301,L]
RewriteCond %{HTTP_HOST} ^(.*)\.site-internet\.com$
RewriteCond %{HTTP_HOST} ^site-internet\.com$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
但这不起作用。我应该纠正什么?
.htaccess ×5
apache-2.2 ×5
apache-2.4 ×3
redirect ×3
mod-rewrite ×2
rewrite ×2
dns-hosting ×1
domain ×1
encoding ×1
google ×1
php ×1
redirection ×1
rewritecond ×1
sni ×1
ssl ×1
static-files ×1
subdomain ×1