Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 漂亮网址&;搜索引擎优化友好的网址?_Apache_Mod Rewrite_Seo - Fatal编程技术网

Apache 漂亮网址&;搜索引擎优化友好的网址?

Apache 漂亮网址&;搜索引擎优化友好的网址?,apache,mod-rewrite,seo,Apache,Mod Rewrite,Seo,我目前正在使用Apache2.2 我可以做一些简单的事情,比如 RewriteRule ^/news$ /page/news.php [L] RewriteRule ^/news/(.*)$ /page/news.php?id=$1 [L] 但是如果我想发送两个这样的参数呢 最后,我还想知道如何实现像stackoverflow这样的SEO友好URL 虽然我可以访问URL为的页面 只是用 用示例片段给我一些建议。注意,他们更喜欢news.php?id=$1而不是news/$1,因为这样更容

我目前正在使用Apache2.2

我可以做一些简单的事情,比如

RewriteRule ^/news$ /page/news.php [L]
RewriteRule ^/news/(.*)$ /page/news.php?id=$1 [L]
但是如果我想发送两个这样的参数呢

最后,我还想知道如何实现像stackoverflow这样的SEO友好URL

虽然我可以访问URL为的页面

只是用

用示例片段给我一些建议。

注意,他们更喜欢
news.php?id=$1
而不是
news/$1
,因为这样更容易检测变量。当增加变量数量时,这一点更为重要,因为仅看第一个示例就有点令人困惑:

http://www.example.com/link/param1/param1_value/param2/param2_value
如果有一个参数是通用的(如类别),则始终可以将这两个参数组合在一起:

http://www.example.com/param1/?id=param2_value

如果需要多个参数,并且不是临时搜索,那么应该重新评估设计。

我知道PHP symfony框架允许您这样做

它是如何工作的: 在apache配置中,使用mod_rewrite将所有传入的重新请求重定向到单个入口点(在symfony中称为“前端控制器”)


重新启动发动机
重写规则^(.*)$index.php[QSA,L]
在这个前端控制器中,您将创建一个“请求”对象,它保存URL提供的所有信息

例如,您可以说“/”后面的第一件事是要调用的PHP文件的名称,其他所有内容都是参数和值,以便: 将调用id为2的file.php

要做到这一点,只需使用一些regexp并仔细设计“Request”类。对于上面的示例,“Request”类应该同时提供getRequestAction()和getParameter(字符串参数)方法。当完全填充“Request”对象以调用正确的文件/操作/方法时,将使用getRequestAction()方法

如果选择使用URL上的reg exp和对_GET数组的解析来填充请求对象的参数数组,则可能会出现以下情况: 与 (两者都可以工作)

您可以选择忽略扩展(http://example.com/file.html 是否与相同)

最后,对于某些URL,您可以选择忽略最后一个“/”之后的所有内容。因此:与

在不同的file.php中,只需使用$request->getParameter('id')来获取“id”参数的值,而不是使用_get或_POST数组

重点在于

  • 将所有传入流量重定向到单个“前端控制器”
  • 在该文件中,创建一个“请求”对象,该对象包含运行站点所需的所有信息
  • 根据“请求”对象中包含的信息调用正确的操作(php文件)
  • 在操作内部,使用此请求对象获取URL中包含的参数

  • 希望这能有所帮助

    实际上谷歌希望非必要参数使用变量。如果参数定义了您正在检索的内容(而不是像会话id那样在不改变页面的情况下改变),那么友好的url仍然有效better@boomhauer请参阅我添加的链接:“尽管我们能够正确处理此URL,但我们仍不鼓励您使用此重写,因为它很难维护,需要在原始动态URL中添加新参数后立即更新。“是的,没错。。。但是他们的索引器对友好url的处理要比不友好的要好得多,所以我想证据是:)有人举过这样的例子吗?我希望实现这种类型的配置,但对于“file.php”文件中的代码实际外观,我有点茫然。
    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteRule ^(.*)$ index.php [QSA,L]
    </IfModule>