我需要帮助配置我的.htaccess文件以正确处理重定向。
这就是我需要发生的事情。 Stackoverflow的垃圾邮件过滤器不允许我发布完整的域名。所以我说“DOMAIN”你可以替换“domain.com”。 (我还需要在http中添加和补充。)
DOMAIN/page
版本文件的请求重定向到www.DOMAIN/page
。www.DOMAIN/index.php?q=37
www.DOMAIN/latest-news
的文件
示例:
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
谢谢!
答案 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]
希望这有帮助