301重定向htaccess

时间:2011-07-15 10:46:48

标签: php .net apache .htaccess

我的htaccess有问题

我有以下

Redirect 301 /inspection-test.html http://www.newsit.co.uk/inspection-test.aspx

我当前的网站在php上运行,新的网站在.net

上运行

重定向有效,但显示为

http://www.newsit.co.ukinspection-test.html

2 个答案:

答案 0 :(得分:1)

您可以尝试使用RedirectMatch Apache HTTPD Docs代替:

RedirectMatch 301 ^/inspection-test\.html$ ttp://www.newsit.co.uk/inspection-test.aspx

Redirect Apache HTTPD Docs会将原始网址部分添加到重定向网址的末尾,从而在您的服务器上生成意外输出。

使用RedirectMatch,您可以更好地控制行为。

答案 1 :(得分:0)

奇怪。

只有当你的Redirect第一个参数是一个目录而不是一个文件时,才会在路径末尾附加的url-part发生。

现在,当您测试重写时,不应使用 301 代码,因为您的浏览器将存储第一个结果(因此您的首次测试)并且永远不会向服务器询问固定映射(如果你修复它)。因此,在重做重定向测试之前,您还需要关闭浏览器。所以也许你的规则没问题,但你的浏览器没有测试它。

在测试时,您应使用 302 重定向代码。

  

Theres很多页面和所有网址不同

你应该学习RewriteMap。如果您可以非常轻松地列出旧网址并将每个网址映射到新的网址网址,那么txt:地图将会覆盖作业,首先是302代码,当您使用它时,请使用301代码哈希映射文件而不是文本。

RewriteMap oldtonew txt:/path/to/my/hashmap/oldtonew.txt [NC]
# detect new url from map file
RewriteCond  ${oldtonew:%{REQUEST_URI}|NotFound}  !NotFound
RedirectRule .?  ${oldtonew:%{REQUEST_URI}}  [NC,R=301]
#no mapping
RewriteCond  ${oldtonew:%{REQUEST_URI}|NotFound}  NotFound
RedirectRule .?  http://www.example.com/notfound.html  [NC,R=301]

在oldtonew.txt中写下这样的东西

/inspection-test.html http://www.newsit.co.uk/inspection-test.aspx
/inspection-foo.html http://www.newsit.co.uk/inspection-bar.aspx

否则,如果您可以使用旧网址中的某些关键字来表达旧到新的映射,则 DirectoryMatch 可能会执行此操作,或者使用良好的提取进行一些mod-rewrite。但更快的解决方案是带有哈希文件(dbm)的rewriteMap。

最后如果你只能用一个程序(一个数据库?)来表达你的旧到新url映射,你必须在rewriteMap中使用prg:关键字(非常难)。