帮助设置.htaccess文件重定向

时间:2010-09-05 20:55:07

标签: php apache .htaccess

我需要帮助配置我的.htaccess文件以正确处理重定向。

这就是我需要发生的事情。 Stackoverflow的垃圾邮件过滤器不允许我发布完整的域名。所以我说“DOMAIN”你可以替换“domain.com”。 (我还需要在http中添加和补充。)

  1. 应将DOMAIN/page版本文件的请求重定向到www.DOMAIN/page
  2. 应允许对“友好”版本的URL进行请求。因此,访问www.DOMAIN/index.php?q=37
  3. 应该可以查看真正位于www.DOMAIN/latest-news的文件
  4. 我有301重定向的大清单。我们最近将网站从基于.asp的CMS更改为用PHP编写的网站。
  5. 示例:

    redirect 301 /overview.asp http://www.DOMAIN/overview
    

    第1项和第2项工作正常。

    但是对于第3项,如果我将浏览器请求“http://www.DOMAIN/overview.asp”而不是重定向到文件的友好名称(“http://www.DOMAIN/overview”),则会重定向到{{1} }。这就是问题所在。

    我需要更改什么才能使其正常工作?

    我的配置如下:

    http://www.DOMAIN/index.php?q=overview.asp

    谢谢!

1 个答案:

答案 0 :(得分:0)

Mod_rewrite正在做你要求它做的......(是的:-),这通常是计算机的问题。)

/overview.asp http://www.DOMAIN/overview行上,您设置浏览器从头开始发送一个全新的请求,从顶部再次启动整个周期,并被^(.*)$ index.php?q=$1指令捕获。

如果REQUEST_FILENAME为 overview news ,则应在此行之前放置另一个RewriteCond以阻止^(.*)$规则应用。您也可以简单地将 /overview.asp 重写为概述 [L],而不是重定向。

如果可以的话,将RewriteLog指令设置为最高详细程度并查看日志文件 - 它通常可以非常好地了解实际情况......

编辑 - 如果我做得对,你应该这样做:

RewriteCond %{REQUEST_FILENAME} ! \.asp$
RewriteCond %{REQUEST_FILENAME} ! ^overview$
RewriteCond %{REQUEST_FILENAME} ! ^news$
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

这会阻止任何已经以.asp结尾的文件,以及那些寻找概述和新闻的文件被重定向到index.php。

我怀疑无论如何你对搜索引擎优化的东西都有所回头。您应该从脚本期望的查询字符串结构开始,并将其用作构建合理的URL寻址模式的基础。

编辑#2:

正则表达式与正则表达式之间的空间太多了。以下代码不是像以前那样来自内存 - 我已经在我的本地Apache上进行了测试,它完成了应该做的事情(只要我理解正确...)

 RewriteCond %{REQUEST_FILENAME} !\.asp$
 RewriteCond %{REQUEST_FILENAME} !overview$
 RewriteCond %{REQUEST_FILENAME} !news$
 RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

希望这有帮助