拥有包含以下网址的网站:
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
感谢任何帮助
答案 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]
规则必须先于其他规则。