如何使我的规则与 cookie 的确切值匹配?我试过了:
RewriteCond %{HTTP_COOKIE} ^its=me$ [NC]
RewriteCond %{HTTP_COOKIE} its=^me$ [NC]
RewriteCond %{HTTP_COOKIE} its="me" [NC]
RewriteCond %{HTTP_COOKIE} its=me [NC]
Run Code Online (Sandbox Code Playgroud)
最后一个几乎有效,但是当额外的文本位于值的末尾时匹配,例如“me2”。仅当its
cookie 的确切值为 时me
,条件才应为真,之前或之后没有更多内容。
这些值应不匹配:
我有一些这样的 Apache 配置:
# Image hotlinking rule
RewriteCond %{HTTP_REFERER} ^http://badsite\.com/
RewriteRule .*/static/artwork/.*\.(jpg|png)$ /static/images/hotlink.png [L]
# Redirects
RewriteRule ^static/artwork/(.+)$ http://cdn.mysite.com/artwork/$1 [L,R=301]
# CodeIgniter
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)
它应该执行以下操作:
badsite.com
,则阻止它并显示热链接图像。但是,我认为第一个RewriteCond
适用于重定向规则,而不是盗链规则,因为来自该引用者的图像请求被重定向到 CDN,而不是盗链图像。Apache 文档中的一个示例(本节底部)暗示换行符停止RewriteCond
应用,但这并没有发生。
有没有办法“重置”RewriteCond
规则,或者我的配置中是否有其他错误?
我www.example.com/advice/
现在有以下网址注意到网址末尾的斜杠了吗?我希望将其删除为类似www.example.com/advice
. 现在,当我在浏览器中输入该 URL 时,我会被重定向到带有尾部斜杠的 URL,例如使用 curl 也是如此。现在我知道尾部斜杠被添加了,因为建议是一个实际的目录。
[steve@dev dev.www.example.com]$ curl -I https://dev.www.example.com/advice -k
HTTP/1.1 301 Moved Permanently
Date: Fri, 25 Nov 2016 08:20:11 GMT
Server: Apache/2.4.6 (CentOS)
Location: https://dev.www.example.com/advice/
Cache-Control: max-age=0
Expires: Fri, 25 Nov 2016 08:20:11 GMT
Connection: close
Content-Type: text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)
[steve@dev dev.www.example.com]$ curl -I https://dev.www.example.com/advice/ -k
HTTP/1.1 200 OK
Date: Fri, 25 Nov 2016 08:21:19 GMT
Server: Apache/2.4.6 (CentOS)
X-Powered-By: PHP/5.6.27
Set-Cookie: flarum_session=mfbou2hcbvcobhncnaqlvl9bm7; Path=/; HttpOnly
X-CSRF-Token: WV69M1oi8POqOcXi6MvwKhbJQ72Tmo2WpFn3oxwq
Content-Length: 10339
Cache-Control: max-age=0
Expires: Fri, …
Run Code Online (Sandbox Code Playgroud) 最近,我注意到 htaccess 文件中的多个位置添加了新行。
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/(?:\ Ballot169)?
Run Code Online (Sandbox Code Playgroud)
我不明白它的作用,如果可能的话,我希望澄清其目的。
下面的示例显示了它的显示方式。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/(?:\ Ballot169)?
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/(?:\ Ballot169)?
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Run Code Online (Sandbox Code Playgroud)
先感谢您。
我想阻止 Apache为某些经常请求的不相关的不存在文件记录“文件不存在”错误,例如“apple-touch-icon-120x120.png”。这些日志条目使我的日志变得混乱,并且很难看到“真正的”问题。这就是我想出的:
RewriteCond %{REQUEST_URI} ^/apple-touch-icon(-\d+x\d+)?(-precomposed)?\.png$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ - [redirect=404]
Run Code Online (Sandbox Code Playgroud)
想法:如果请求的文件不是常规文件,也不是符号链接,则 RewriteRule 将导致不记录错误。这类型的作品。
现在我面临以下问题:如果我实际上创建了一个名为“apple-touch-icon-120x120.png”的符号链接,那么我的 RewriteRule 仍然会触发并且我得到 404。没有规则或当我将文件设为常规文件时文件而不是符号链接,文件被正确提供。我认为通过使用!-l标志,只有当请求的文件不是常规文件并且它也不是符号链接时,我才能触发我的规则。但这似乎不起作用......
我在 Apache 的错误日志中没有看到任何可疑的东西。我在这里可能做错了什么?
最近我注意到我的服务器通过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) 仅当此目录中的文件不存在时,如何使 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) rewritecond ×7
mod-rewrite ×5
apache-2.2 ×4
.htaccess ×3
rewrite ×3
apache2 ×1
cpanel ×1
mod-proxy ×1
pki ×1
security ×1
wordpress ×1