Apache 一些网站如何使用任何请求的URL在没有404'的情况下动态创建页面;s

Apache 一些网站如何使用任何请求的URL在没有404'的情况下动态创建页面;s,apache,.htaccess,Apache,.htaccess,例如: 此url不存在esist,但当您访问该网站时,它会将您带到一个搜索页面,其中包含法兰的搜索结果 首先,我认为他们使用了.htaccess和ErrorDocumnet指向一个搜索脚本来返回对url中任何内容的搜索 这很容易做到,但我注意到ebuyer的响应是200ok,而我的方法的响应是404notfound。用户将永远不会看到这一点,但我猜测搜索引擎优化这将是更好的做法,这将返回200确定 他们是怎么做到的 谢谢您是对的,它不是通过ErrorDocument指令完成的,因为它会将404状

例如:

此url不存在esist,但当您访问该网站时,它会将您带到一个搜索页面,其中包含法兰的搜索结果

首先,我认为他们使用了.htaccess和ErrorDocumnet指向一个搜索脚本来返回对url中任何内容的搜索

这很容易做到,但我注意到ebuyer的响应是200ok,而我的方法的响应是404notfound。用户将永远不会看到这一点,但我猜测搜索引擎优化这将是更好的做法,这将返回200确定

他们是怎么做到的


谢谢

您是对的,它不是通过ErrorDocument指令完成的,因为它会将404状态返回给浏览器。这实际上是通过重写规则完成的。请参见以下示例:

RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d  [OR]
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ search.php?q=$1 [L,QSA]
这仅仅意味着,如果您的web服务器上不存在请求的文件、目录或链接,则
在内部将请求转发到名为
search.php
的脚本,并将请求的URI作为搜索参数
q
传递。最后,一个
http200
返回到浏览器,而不是
404


e、 g.
/flange
将在内部变成
/search.php?q=flange
,并将200返回到浏览器。

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

对于一个类似的概念,比如在这个问题的URL上。 它被分解为以下逻辑概念:

[domain]/[function]/[identifier]/[extra information for human readability]

这告诉服务器上的模块它需要查看“问题”功能,并提供标识符为14689056的问题

在这种情况下,让系统响应搜索结果页面(而不是404页面)非常容易,因为您已经在幕后根据URL重新引导用户

在.NET(3.5+)和IIS中,有一组很好的与URL路由相关的类,可以在全局.Asax中进行操作来实现这一点(早期版本的.NET也可以实现这一点,因为没有本机类,所以它只会带来一些麻烦)

在apache中,您需要处理mod_重写和其他我不太熟悉的零碎东西,因为我是.NET程序员。这个问题会让你开始朝着你需要的方向前进