使用htaccess修复修改后的URI上的链接

时间:2014-01-07 17:56:19

标签: .htaccess

拥有包含以下网址的网站:

www.mydomain.com/search/keyword

www.mydomain.com/about

www.mydomain.com/user

开.htaccess:

RewriteEngine on
RewriteRule ^search/(.*) search.php?q=$1 [qsa]
RewriteRule ^about about.php
RewriteRule ^user user.php

点击带有搜索请求的页面上的“about”时,我想访问网址“www.mydomain.com/about”而不是“www.mydomain.com/search/about”。

是否可以使用.htaccess实现?也许在HTTP_REFERER上识别search.php?

我希望将超链接写为,而不是因为目录结构。

将以下行添加到htaccess会给我一个部分解决方案:

RewriteCond %{HTTP_REFERER} search/(.*)
RewriteRule ^search/(.*) $1 [qsa]

搜索上的“info”链接指向网址www.mydomain.com/search/info,该网址已成功重定向到信息页面,但在正确的方案中,显示的网址应为www.mydomain.com/info。

我尝试了[r]修饰符,但页面重定向到www.mydomain.com/C:\htdocs\info.php

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

您的搜索页面中似乎有相关链接。网址/search/keyword深度为2个“虚拟文件夹”,浏览器(对实际search.php页面一无所知)认为相对链接应具有基础/search

尝试将链接设为绝对网址或将其添加到网页标题中:

<base href="/" />

编辑:

  

将以下行添加到htaccess会给我一个部分解决方案:

RewriteCond %{HTTP_REFERER} search/(.*)
RewriteRule ^search/(.*) $1 [qsa]
  

搜索上的“info”链接指向网址www.mydomain.com/search/info,该网址已成功重定向到信息页面,但在正确的方案中,显示的网址应为www.mydomain.com/info。

     

我尝试了[r]修饰符,但页面重定向到www.mydomain.com/C:\htdocs\info。

您需要在$1之前添加一个斜杠,告诉apache您指的是URL路径而不是文件路径。

RewriteCond %{HTTP_REFERER} search/(.*)
RewriteRule ^search/(.*) /$1 [L,R,QSA]

规则必须先于其他规则。