我最近重构了一个现有的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”错误,这是否足以让我的网页从谷歌中移除?
答案 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]