1

例如:http ://www.ebuyer.com/flange

这个网址并不存在,但是当您访问该网站时,它会将您带到一个搜索页面,其中有法兰的搜索结果。

首先,我认为他们使用 .htaccess 和 ErrorDocumnet 指向搜索脚本以返回对 url 中内容的搜索。

这很容易做到,但我注意到 ebuyer 以 200 OK 响应,而我的方法以 404 Not found 响应。用户永远不会看到这一点,但我猜测对于 SEO,返回 200 OK 会更好。

他们是怎么做到的?

谢谢

4

2 回答 2

1

没错,它不是通过 ErrorDocument 指令完成的,因为它会向浏览器返回 404 状态。它实际上是通过 RewriteRule 完成的。请参见以下示例:

RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d  [OR]
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ search.php?q=$1 [L,QSA]

这仅仅意味着如果您的网络服务器上不存在请求的文件或目录或链接,则internally forward请求调用脚本search.php并将请求的 URI 作为搜索参数传递q。最后 aHTTP 200被返回给浏览器而不是404.

eg/flange将变为/search.php?q=flange内部并向浏览器返回 200。

于 2013-02-04T14:58:38.627 回答
1

正在发生的事情是有一些路由规则在起作用。基本上,一些代码会看到 URL(例如: www.ebuyer.com/flange )并且知道“flange”方面是它应该尝试查找和显示的关键字。

对于类似的概念,例如此问题的 URL。它分为以下逻辑概念:

[域]/[功能]/[标识符]/[人类可读性的额外信息]

这告诉服务器上的模块它需要查看“问题”功能,并使用标识符 14689056 传递问题。

在这种情况下,让系统响应搜索结果页面而不是 404 很容易,因为您已经根据 URL 在幕后重定向用户。

在 .NET (3.5+) 和 IIS 中,有一组很好的与 URL 路由相关的类,可以在 Global.Asax 中进行操作以执行此操作(早期版本的 .NET 也可以执行此操作,只是有点麻烦参与,因为没有本地类)。

在 apache 中,您需要处理 mod_rewrite 和其他我不太熟悉的问题,因为我是一名 .NET 程序员。这个问题Routing URLs in PHP将让你开始朝着你需要的方向前进。

于 2013-02-04T14:58:56.277 回答