首先,我还是 mod_rewrite 的新手。
大家好,如果我有这个 .htaccess 代码
RewriteEngine On
RewriteRule ^index/(.*)/$ index.php?usr=$1 [L]
必须将链接(href)的形式更改为
例子
<a href="index/image/">Click Here</a>
或者保持原样
例子
<a href="index.php?usr=5">Click Here</a>
如果保持原样,<a href="index.php?usr=5">Click Here</a>
将以这种方式显示链接http://domain.com/index/image/
。
编辑#1
这是 HTML 代码的示例。
<div id="main_menu">
<ul>
<li><a href="index.php">{$lang.Nav_Home}</a></li>
<li><a href="sections.php?cid={$value.cat_id}">{$value.cat_name}</a></li> {else}
<li id="moreSection_{$secNum}" style="display: none;"><a href="sections.php?cid={$value.cat_id}">{$value.cat_name}</a></li>
<li><a href="javascript:;" onclick="showHideMoreSec('moreSection',this)"> <img src="images/arrow_down.png" alt="{$lang.MainMenu_MoreSection}" title="{$lang.MainMenu_MoreSection}" /> </a></li>
</ul>
</div>
答案1
我认为您的问题是您必须将PATH
和QUERY_STRING
作为两个独立的元素来处理。
http://some.server/sections.php?cid=5
^^^^^^^^^^^^ ^^^^^
|||| ||||
path query string
尝试如下一组规则:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ [OR]
RewriteCond %{QUERY_STRING} ^cid=(.*)$ [NC]
RewriteRule ^/sections.php$ /sections/%1? [NC,L,R=301]
这些规则的作用如下。第一行RewriteCond
是如果没有 则跳过QUERY_STRING
。第二行将RewriteCond
等号后面的位保存在变量中,%1
。最后一行,RewriteRule
,构建了我们的新PATH
,/部分/%1,任何时候/sections.php遇到行,并且有一个QUERY_STRING
,cid=...。
示例 html 文件:
<html>
<body>
<a href="/sections.php?cid=5">Click Here</a>
</body>
</html>
将鼠标悬停在上述页面上的单击此处链接上会显示以下内容:
http://localhost/sections.php?cid=5
单击此链接将转到以下 URL:
http://localhost/sections/5
我的 /var/www/html 有以下内容:
% tree /var/www/html
/var/www/html
|-- test.html
`-- sections
`-- 5
1 directory, 2 files
资源
答案2
不会。RewriteRule
只有当用户向服务器发出请求时才会发生。它不会影响用户将鼠标悬停在链接上时看到的内容,也不会更改用户看到的地址从你把它改成什么到您将其从什么地方更改过来(意思是:您正在重写index/image/
为index.php?usr=image
;而不能以其他方式将其从 更改index.php
为index/image/
)。