我需要更改 jpg 路径以指向网站中的不同图片。这必须通过 apache conf 来完成,因为网站总是用 git 更新。
重点是帮助开发人员轻松查看他们正在哪个开发环境中工作,因此如果我可以将主徽标的路径重写为他们家中其他东西的路径就完美了。
我试图在 VirtualHost 配置中添加这个: RewriteRule ^/img/logo.jpg /home/someUser/logo2.jpg
刚刚开始尝试了解所有指令和选项在 Apache 下的工作方式。
我想对我的一个站点进行重定向(仅在服务器上运行一个站点),以便当请求进入 http:/example.com 时,服务器会自动将它们重定向到http://的子 URL example.com/mylink。
我尝试将重定向放入位于 /etc/apache2/sites-enabled 的文件中来重写它,但是顶级域 URL 抱怨它没有正确重定向。
我想我想要的是浏览器重定向,并认为使用
RewriteEngine On
RewriteRule ^/$ /mylink [L,R]
Run Code Online (Sandbox Code Playgroud)
会起作用,但将其放入 .htaccess 文件不起作用(它重定向但立即给出了 500 内部服务器错误。)
尝试重新启动 Apache 时,将其放入 /etc/apache2/sites-enabled 中的文件会导致配置错误。
我知道这很简单……但我错过了什么?
Apache 是我的应用程序的反向代理。客户要求http://cdn.example.com/foo/images/logo.png:
GET /foo/images/logo.png HTTP/1.1
Host: cdn.example.com
Run Code Online (Sandbox Code Playgroud)
我希望 Apache 修改请求,以便反向代理另一端的应用程序以以下格式接收它http://foo.example.com/images/logo.png:
GET /images/logo.png HTTP/1.1
Host: foo.example.com
Run Code Online (Sandbox Code Playgroud)
重写 URL 很容易,但我还没有找到一种方法来使用从 URL 中提取的值来修改 Host 标头。这可能吗?
最近我注意到我的服务器通过netstat -na.
为了找出它发送的内容,我尝试了:
tcpdump -i eth0 host 121.11.76.48 -nnvvXSs 1514
Run Code Online (Sandbox Code Playgroud)
并发现它不断向此位置发送 HTTP 请求:
22:55:21.179353 IP (tos 0x0, ttl 64, id 26103, offset 0, flags [DF], proto: TCP (6), length: 296) 192.168.1.13.58155 > 121.11.76.48.80: P, cksum 0x880b (incorrect (-> 0xd884), 1904784743:1904784999(256) ack 915059568 win 46
0x0000: 4500 0128 65f7 4000 4006 4ce8 c0a8 010d E..(e.@.@.L.....
0x0010: 790b 4c30 e32b 0050 7188 b567 368a b370 y.L0.+.Pq..g6..p
0x0020: 5018 002e 880b 0000 4745 5420 2f20 4854 P.......GET./.HT
0x0030: 5450 2f31 2e31 …Run Code Online (Sandbox Code Playgroud) 我有一个虚拟主机在我的本地 Apache 副本上运行。它有一个别名。
<VirtualHost 127.0.0.1>
ServerName oliverash.me.dev
DocumentRoot "/usr/docs/oliverash.me/public"
Alias /mayor "/usr/docs/uni/tmosct/public"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这工作正常。我可以通过oliverash.me.dev/mayor在浏览器中访问来访问别名。但是,我.htaccess rewrite在那个别名的文件夹中有一个简单的,它将所有内容(文件夹除外)重写到 index.php 页面。此重写工作正常。
尽管重写正在工作,但重写返回 404 Not Found 错误。例如,如果我转到oliverash.me.dev/mayor/abcdefg,它会重写index.php文件,但我收到此错误:
“在此服务器上找不到请求的 URL /usr/docs/uni/tmosct/public/index.php。”
这个文件确实存在。我可以直接访问它。
当我使用相同的别名但localhost不仅仅是这个虚拟主机时,重写工作正常,index.php 返回实际文件,而不是 404。这让我觉得这与我的权限有关虚拟主机。所以我试图在我的下面添加这个httpd-vhosts.conf(没有运气):
<Directory "/usr/docs/oliverash.me/public">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
这些是在localhost's上使用的相同设置DocumentRoot,所以我不明白为什么它没有帮助。
更新:
所以我检查了Apache error_log。事实证明,这个别名的重写实际上是相对于这个虚拟主机的文档根目录的。
[Fri Jan 06 22:30:57 2012] [error] [client 127.0.0.1] File does not exist: /usr/docs/oliverash.me.dev/usr
这个重写实际上是在/usr/docs/oliverash.me.dev/public/usr/docs/uni/tmosct/public寻找 index.php。希望很明显,它应该在寻找/usr/docs/oliverash.me.dev。
更新 2: …
public我的文档根目录中有一个文件夹。我想重定向文档根目录中不存在但存在于公共文件夹中的所有文件。(所以如果同一个文件在两个地方,不公开的文件将首先提供。)
我该怎么做?
以下不起作用:
RewriteCond %{DOCUMENT_ROOT}/public/%{REQUEST_URI} -f¬
RewriteRule ^(.*)$ public/$1 [QSA, PT, L]
Run Code Online (Sandbox Code Playgroud) 我有两个两个文件/etc/apache2/sites-available/foo和/etc/apache2/sites-available/foo_maintenance
我使用的重写规则/etc/apache2/sites-available/foo是
<Directory /var/www/public_html>
Options +FollowSymlinks
RewriteOptions inherit
RewriteEngine on
#
RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]
</Directory>
Run Code Online (Sandbox Code Playgroud)
以便所有mysite.com/*重定向到www.mysite.com
在我关闭站点进行维护后,如果用户导航到站点的子页面,例如 mysite.com/subdir/something.php,我想将它们重定向到 www.mysite.com,以便维护的 index.html将显示页面。
将所有流量从任何子页面重定向到的重写规则是什么www.mysite.com?
以下异常不起作用。http://www.domain.com带和不带 /test 重定向到http://www.example.de/foo/,但异常不应该!
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test$
RewriteRule ^(.*)$ http://www.example.de/foo/ [R=302,L]
Run Code Online (Sandbox Code Playgroud)
什么原因?
我有一个对域上的域www.和.子域有效的 SSL 证书。这很好,效果很好。所有流量都http重定向到https,所有裸域流量都重定向到www.版本。简而言之,https://www.到目前为止一切都很好。
但是,我也有一个 . com. 目前有一个 apache 级别的重定向(目前无法更改 DNS)
此刻要去https://www.***.com的地址显示,该证书是无效的,这当然是正确的-这是只为www和.上.co.uk。
题
如何https://www.***.com在https://www.***.co.uk没有 .com 的有效 SSL 证书且不更改 DNS 的情况下重定向到?
技术细节
所有域都指向同一台服务器。为 ssl 版本和非 ssl 版本设置了一个 vhost,两者都有 www 的别名,而 .co.uk 和 .com 没有 www。
重写规则,如:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
将所有内容推送到 https。
我读到 httpd.conf 中的目录块就像一个 .htaccess 文件。这是否意味着 RewriteEngineOn 可以在 httpd.conf 中多次使用?我假设它可以,但它必须放在目录块中。有人可以确认吗?
mod-rewrite ×10
apache-2.2 ×9
.htaccess ×2
redirect ×2
virtualhost ×2
alias ×1
directory ×1
httpd.conf ×1
mod-proxy ×1
rewrite ×1
rewritecond ×1
security ×1
ssl ×1