SEO mod_rewrite内部uri目录问题

时间:2012-01-16 05:55:46

标签: html regex .htaccess mod-rewrite seo

我有一个mod_rewrite规则,将example.com/en/about/topic更改为example.com/en/view.php?p=pages/about/topic.php

我的规则是:

  

RewriteRule ^ en /([a-zA-Z0-9 /] +)$ en / view.php?p = pages / $ 1.php

view.php有我所有的持久性东西,如菜单,徽标等,它使用php include来获取pages / topic.php

它适用于example.com/en/topic -> example.com/en/view.php?p=pages/topic.php但是当我尝试example.com/en/about/topic -> example.com/en/view.php?p=pages/about/topic.php时,它会找到view.phppages/about/topic.php并加载它们但会尝试加载我的所有css文件和图像等。 en/about/...代替en/...它为view.php和topic.php中的图像执行此操作。最令人沮丧的是,如果我将[R]添加到规则中,一切正常,但它会破坏SEO练习的目的!

我整天都在这,但没有运气。虽然我确实发现了mod_rewrite日志和一些handy guides

以下是我的日志对example.com/en/test(有效)的说法:

  

[perdir C:/ tt / xampp / htdocs /]重写'en / test' - >   'EN / view.php P =页/ test.php的'

     

[perdir C:/ tt / xampp / htdocs /] strip document_root prefix:   C:/tt/xampp/htdocs/en/view.php - > /en/view.php

     

[perdir C:/ tt / xampp / htdocs /]使用/en/view.php进行内部重定向   [内部重定向]

     

[perdir C:/ tt / xampp / htdocs /]通过   C:/tt/xampp/htdocs/en/view.php

     

[perdir C:/ tt / xampp / htdocs /]通过   C:/tt/xampp/htdocs/en/base/code/view.css

和例如/en/about/test(没有)

  

[perdir C:/ tt / xampp / htdocs /]重写'en / about / dir / test' - >   'EN / view.php P =页/约/目录/ test.php的'

     

[perdir C:/ tt / xampp / htdocs /] strip document_root prefix:   C:/tt/xampp/htdocs/en/view.php - > /en/view.php

     

[perdir C:/ tt / xampp / htdocs /]使用/en/view.php进行内部重定向   [内部重定向]

     

[perdir C:/ tt / xampp / htdocs /]通过   C:/tt/xampp/htdocs/en/view.php

     

[perdir C:/ tt / xampp / htdocs /]通过C:/ tt / xampp / htdocs / en / about

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在某种程度上,你提出错误的问题。你给予的规则是有效的,也可以做你想要的。您的问题是脚本正在为您的CSS,图像等发布相对地址。因此,当客户端浏览器请求包含相对链接example.com/en/about/topic的{​​{1}}时,客户端将将其转换为

href="base/code/view.css"

鉴于您不想更改脚本,因此您面临的挑战是识别这种类型的模式并删除SEO编码引入的无关目录,因此如果这种情况为example.com/en/about/base/code/view.css ,那么以下规则类型将做什么

example.com/en/<don't care>/base/code/...

RewriteRule en/.+?/base/code/(.*) en/base/code/$1 [L] 替换为您需要的任何匹配模式。