【问题标题】:SEO friendly URLs changes default directorySEO 友好 URL 更改默认目录
【发布时间】:2011-12-02 00:06:04
【问题描述】:

这个问题困扰了我很长时间。我承认这可能是因为缺乏经验所以我希望我能得到一些想法。

这是.htaccess中的代码

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^view-([0-9]+)$ view.php?id=$1 [NC,QSA]

因此,当我访问 http://domain/project/view-44 时,它可以正常工作,但我希望它最后可以使用斜杠,例如 http://domain/project/view-44/

所以我把最后一行改成了

RewriteRule ^view-([0-9]+)/$ view.php?id=$1 [NC,QSA]

现在当我访问http://domain/project/view-44/ 时,所有的图片、javascript 和样式都消失了。

现在,不是从 http://domain/project/style.css 获取 css,而是尝试从 http://domain/project/view-44/style.css 获取它

我认为问题在于为项目指定 url 的方式不正确。就我而言,它只是

<link rel="stylesheet" type="text/css" href="style.css" >
<img src="images/web/showreel.png" alt="Image1" />

这是否意味着我必须在每个必需元素中指定一个完整的 url (http://domain/project/images/web/showreel.png)?

【问题讨论】:

    标签: php .htaccess url seo


    【解决方案1】:

    始终最好指定绝对 URL,因为这样您就知道将始终可以访问该文档。我知道它啰嗦,但没有声明

    <img src='http://domain/project/images/web/showreel.png' />
    

    设置一个 PHP 全局变量,如

    define('SITE_URL', ' http://domain/project');
    

    那就做吧

    <img src='<?php echo SITE_URL; ?>/images/web/showreel.png' />
    

    关于 .htaccess,请查看 http://blog.valtersboze.com/2009/06/add-or-remove-trailing-slash-in-url-with-htaccess/

    这解释了如何删除或保留尾部斜杠,但不能同时删除或保留两者,谷歌不喜欢两者,他们会将其视为重复内容。

    【讨论】:

    • 谢谢肖恩,我知道除了使用完整的 url 之外别无他法。
    【解决方案2】:

    简单的解决方法是使用

    <base href="/index">
    

    在您的 HTML 模板的 &lt;head&gt; 中。因此,所有资源链接都再次与根目录相关,独立于虚拟 RewriteRule 结构。

    http://www.w3.org/TR/html5/semantics.html#the-base-element

    【讨论】:

      【解决方案3】:

      资源的绝对路径就足够了:

      <link rel="stylesheet" type="text/css" href="/project/style.css" >
      <img src="/project/images/web/showreel.png" alt="Image1" />
      

      注意开头的/ 字符。您不需要主机名和 http 部分。

      为了避免开发和生产之间绝对网址的差异,您可以做一件简单的事情。在您的 apache 配置中启用虚拟主机并为您的每个项目创建一个虚拟主机。这样你就不必在你的开发环境中使用这个结构了:

      http://localhost/project1
      http://localhost/project2
      

      但你可以使用这样的网址

      http://project1/
      http://project2/
      

      这样你的问题就解决了,你可以使用像/images这样的url作为你的资源。

      要为 apache 启用虚拟主机,您需要通过将这些行添加到您的 /etc/hosts 文件来调整您机器的 dns 配置

      127.0.0.1 project1
      127.0.0.1 project2
      

      然后你需要创建corresponding virtual hosts

      【讨论】:

      • 这会暂时解决问题,但是当我从本地服务器转到项目专用服务器时,项目将位于根目录中。然后我必须编辑每个链接。
      • 您的开发环境应该与您的生产环境相似,以避免此类问题。我会用这个问题的解决方案来更新答案。
      • 你太棒了,法比奥。谢谢。
      • @Arturs 不客气。如果您觉得我的回答有用,您可以随时接受;-)
      【解决方案4】:

      把这个放在文档的头部:

      <base href="http://domain/project/" />
      

      这是必要的,因为客户端的浏览器无法知道重写后的 URL,只有服务器端知道。

      【讨论】:

        猜你喜欢
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 2021-02-27
        • 1970-01-01
        • 2013-02-14
        • 2011-05-29
        相关资源
        最近更新 更多