通过.htaccess请求index.php时发送404?

时间:2010-05-08 19:23:09

标签: .htaccess codeigniter

我最近重构了一个现有的CodeIgniter应用程序来使用url段而不是查询字符串,我在htaccess中使用rewriterule将内容重写为index.php:

RewriteRule ^(.*)$ /index.php/$1 [L]

我现在的问题是,这个网站的很多网页都是由google索引的,链接指向index.php。由于我更改了使用网址段,我不再关心这些谷歌搜索结果了,我想发送一个404(不需要使用301永久移动,已经有足够的更改,它只需要重新抓取一切)。

要明白这一点:如何将请求重定向到/index.php?无论404页面是什么?我想重写一个不存在的文件会导致apache发送404.这是一个可以接受的解决方案吗?重写器如何看起来像?

编辑:
目前,现有的谷歌搜索结果只会导致以下错误:

  

遇到错误

     

您提交的URI已被禁止   字符。

我尝试过类似的事情:

RewriteRule ^index\.php?(.*)$ /no-exist.html [R=404,L]

但它导致内部服务器错误。

EDIT2:

CodeIgniter已经发送了“400”错误,这是否足以让我的网页从谷歌中移除?

2 个答案:

答案 0 :(得分:2)

RewriteRule的R[=code]标记仅允许code范围为300-400。

不要使用重定向R标志 - 只是尝试重写一个不引人注意的页面:

<强>已更新: 两个重定向相互匹配 - 使用RewriteCond来逃避干扰。

完成 .htaccess

RewriteEngine on

RewriteCond %{REQUEST_URI} ^/index.php.*
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^(.*)$ /no-exist.html [L]

RewriteCond %{REQUEST_URI} !^/index.php.* 
RewriteCond %{REQUEST_URI} !^/no-exist.html.* 
RewriteRule ^(.*)$ /index.php/$1 [L]

注意 /no-exist.html 实际上不存在。假设,它会对你有帮助。

答案 1 :(得分:1)

有一个特殊的HTTP状态代码 410 GONE 告诉全世界删除资源: 请求的资源 的index.php 在此服务器上不再可用,并且没有转发地址。请删除对此资源的所有引用。

要发送此代码,请在重写规则中使用[G|gone]标志:

RewriteEngine on

RewriteCond %{REQUEST_URI} ^/index.php.* 
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^(.*)$ / [G,L]

RewriteCond %{REQUEST_URI} !^/index.php.* 
RewriteRule ^(.*)$ /index.php/$1 [L]