2011-08-13 51 views
1

我浏览过其他主题,其中包括:Mod_rewrite invisibly: works when target is a file, not when it's a directory,但我无法找到解决问题的方法。URL无法重写 - 如何防止重写的URL出现在地址栏中?

我有以下重写规则:

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并显示在浏览器的地址栏这个新的重写地址。

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


编辑

这是我的.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] 

回答

1

1.无需2个规则做同样的工作(唯一的区别是尾随斜线的存在)。

2.如果您有[NC]标志 - a-z就足够了,则无需在模式中有a-zA-Z。没有./

考虑到所有上述提到的规则

3.尝试规则将变为:

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

附: 我还添加了QSA标志来保留原始查询字符串(如果存在)。

该规则经过测试,工作正常。如果它仍然不适合你,那么发布ALL重写规则,你有。

+0

谢谢,但它仍然不起作用,我编辑了我的问题以发布我拥有的重写规则。 – AntonioJunior

+0

@AntonioJunior对不起,但没有办法,这些规则将做一个重定向(浏览器中的URL更改)。如果你可以编辑服务器配置,然后启用重写调试('RewriteLogLevel 9'),重启Apache,尝试这个有问题的URL并检查重写日志 - 它应该告诉你发生了什么。也许这是你的PHP代码重定向 - 检查创建空的PHP文件,并在重写规则中使用它来代替index.php。我还建议**清除浏览器缓存**或尝试其他浏览器......因为现代浏览器会缓存重定向。 – LazyOne

+0

嗨,LazyOne,非常感谢你!实际上,我在PHP代码中做了一个重定向,在你指出它之前我不记得那个。感谢您耐心解释。 – AntonioJunior

1

这应该工作:

RewriteEngine On 

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

它仍然不起作用。它不断在地址栏中显示重写的网址。我编辑了我的帖子以显示重写规则。 – AntonioJunior

+0

谢谢,马特,但我标出了要发布的第一个答案。 – AntonioJunior