我正试图让一条足够简单的规则起作用:
Input URL: http://example.com/css/styles.css/t=123456
Expected output: http://example.com/css/styles.css
t=123456
表示文件的修改时间,该时间自动添加到服务器端。目前,它是一个查询字符串,但显然在某些情况下不能正确缓存,所以我想在url中对其进行编码。
我尝试的规则很简单:
RewriteRule (.*)/t=[0-9]+ $1
但出于某种原因,我一直收到404 Not Found错误。
我添加了[R=301]
以查看重写的位置,出于某种原因,我发现这是输出网址:
http://example.com/home/evilzoro/public_html/css/styles.css
因此,虽然它正确地剥离了参数,但它正在添加整个文件系统路径!
奇怪的是,其他类似的规则也可以正常使用,例如:
RewriteCond %{REQUEST_FILENAME} !\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [QSA]
那么我做错了什么?
答案 0 :(得分:1)
尝试向规则的目标添加前导斜杠。 Apache必须猜测你是指文件路径还是URI路径,有时它不能正确。
RewriteRule (.*)/t=[0-9]+ /$1