我对 mod_rewrite 有疑问

我对 mod_rewrite 有疑问

首先,我还是 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

我认为您的问题是您必须将PATHQUERY_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_STRINGcid=...

示例 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.phpindex/image/)。

相关内容