更改URL但显示不同的资源

时间:2014-05-25 14:39:01

标签: .htaccess mod-rewrite

如果我的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,以及在到达文件末尾时将其重定向到哪个网页。

2 个答案:

答案 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

解决方案很简短有点奇怪..我怎么没试过呢?