我浏览过其他主题,包括这个主题: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]
答案 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
标志以保留原始查询字符串(如果存在)。
该规则经过测试,运行正常。如果它仍然不适合您,则发布您拥有的所有重写规则。