URL重写无形 - 如何防止重写的URL出现在地址栏中?

时间:2011-08-13 21:29:29

标签: mod-rewrite url-rewriting

我浏览过其他主题,包括这个主题:Mod_rewrite invisibly: works when target is a file, not when it's a directory,但我找不到解决问题的方法。

我有以下重写规则:

RewriteRule ^([a-zA-Z0-9_-]+)$ ./index.php?s=$1 [L,NC]
RewriteRule ^([a-zA-Z0-9_-]+)/$ ./index.php?s=$1 [L,NC]

它的作用是将http://myaddress/parameter之类的内容写入http://myaddress/index.php?s=parameter,并在浏览器的地址栏中显示这个新的重写地址。

如何在不在地址栏中显示重写的网址的情况下进行重写?


修改

这是我的.htaccess文件的内容:

DirectoryIndex index.php

RewriteEngine On

RewriteRule ^([a-z0-9_\-]+)/?$ index.php?s=$1 [L,NC,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)\/?([a-zA-Z0-9_-]+)\/?$ index.php?u=$1&s=$2 [L,NC]
RewriteRule ^([a-zA-Z0-9_-]+)\/?([a-zA-Z0-9_-]+)\/?([a-zA-Z0-9_-]+)\/?$ index.php?u1=$1&u2=$2&s=$3 [L,NC]

2 个答案:

答案 0 :(得分:1)

这应该有效:

RewriteEngine On

RewriteRule ^([-a-zA-Z0-9_]+)$ index.php?s=$1 [L]
RewriteRule ^/?$ index.php [L]

答案 1 :(得分:1)

1。不需要2个执行相同工作的规则(唯一的区别是存在尾随斜杠)。

2。如果您有a-zA-Z标记,那么就不需要[NC]格式 - a-z就足够了。

3。尝试不使用./

的规则

考虑到上述所有规定,规则将成为:

RewriteRule ^([a-z0-9_\-]+)/?$ index.php?s=$1 [L,NC,QSA]

<强> P.S。 我还添加了QSA标志以保留原始查询字符串(如果存在)。

该规则经过测试,运行正常。如果它仍然不适合您,则发布您拥有的所有重写规则。