代码之家  ›  专栏  ›  技术社区  ›  Daniel Sloof

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

  •  0
  • Daniel Sloof  · 技术社区  · 15 年前

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

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

    我现在的问题是,这个网站的很多页面都是由谷歌通过index.php的链接编制的。因为我改为使用URL段,我不再关心这些谷歌结果,我想发送一个404(不需要永久使用301移动,已经有足够的更改,它只需要重新对所有内容进行排序)。

    要达到这一点,我应该如何将请求重定向到/index.php?404页怎么办?我正在考虑重写一个不存在的文件,这将导致Apache发送404。这是一个可以接受的解决方案吗?重写器的外观如何?

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

    遇到错误

    您提交的URI不允许 字符。

    我试过这样的方法:

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

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

    编辑2:

    CodeIgniter已经发送了“400”个错误,这是否足以将我的页面从Google中删除?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Serge S.    15 年前

    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]
    

    注释 : 不存在 实际上不存在。假设,它会帮助你。

        2
  •  1
  •   Serge S.    15 年前

    有一个特殊的HTTP状态代码 410走了 告诉世界删除资源: 请求的资源 索引,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]
    
    推荐文章