如果我的RewriteRule [L]
都不匹配,我想重定向到一个不错的网址/you/shall/not/pass
,但会显示/index.html
的内容。
这就是我现在正在做的事情(这是文件中的最后一条规则):
RewriteCond %{REQUEST_FILENAME} !-f # is not file
RewriteCond %{REQUEST_FILENAME} !-d # is not directory
RewriteCond %{ENV:REDIRECT_STATUS} !=200 # wasn't already redirected
RewriteRule .* index.html
它工作正常,但保留URL中写入的任何垃圾。我希望它能被改变。
这样做不起作用
#RewriteCond same as above
RewriteRule .* /you/shall/not/pass [R]
RewriteRule ^/you/shall/not/pass index.html
我显然不明白[R]
如何工作,是否继续将更改后的网址转发给其他RewriteRule
,以及在到达文件末尾时将其重定向到哪个网页。
答案 0 :(得分:1)
您可以将ErrorDocument 404
与重写规则一起使用:
Options +FollowSymLinks
ErrorDocument 404 http://domain.com/you/shall/not/pass
然后创建一个这样的符号链接:
/public_html/you/shall/not/pass -> /public_html/index.html
将/public_html/
替换为您的DocumentRoot
路径。
答案 1 :(得分:0)
所以,经过无数个小时后我才开始工作,不知何故,我想...... 我太累了,不能调查,但我会稍后回来并编辑,如果它是错误的。
ErrorDocument 404 http://domain.com/you/shall/not/pass # redirects if document does not exist
RewriteEngine on
RewriteRule ^$ /you/shall/not/pass [L,R] # redirects if request URI is empty, skips rest
RewriteRule ^you/shall/not/pass$ /index.html [L] # puts different resource to matched url
解决方案很简短有点奇怪..我怎么没试过呢?