【问题标题】:URL Rewriting invisibly - How to prevent rewritten URL to appear in the address bar?URL 重写隐形 - 如何防止重写的 URL 出现在地址栏中?
【发布时间】:2011-08-13 21:29:29
【问题描述】:

我浏览了其他主题,包括这个: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/parameterhttp://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]

【问题讨论】:

    标签: mod-rewrite url-rewriting


    【解决方案1】:

    1。不需要 2 条规则来完成相同的工作(唯一的区别是尾随斜杠的存在)。

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

    3。试试不带./的规则

    考虑到上述所有内容,规则将变为:

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

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

    该规则已经过测试并且运行良好。如果它仍然不适合您,请发布您拥有的 ALL 重写规则。

    【讨论】:

    • 谢谢,但它仍然不起作用,我已经编辑了我的问题以发布我拥有的重写规则。
    • @AntonioJunior 抱歉,这些规则无法进行重定向(浏览器中的 URL 更改)。如果您可以编辑服务器配置然后启用重写调试 (RewriteLogLevel 9),重新启动 Apache,尝试这个有问题的 URL 并检查重写日志——它应该会告诉您发生了什么。也许是您的 PHP 代码进行了重定向——检查创建空的 PHP 文件并在重写规则中使用它而不是 index.php。我还建议清除浏览器缓存或尝试其他浏览器...因为现代浏览器会缓存重定向。
    • 嗨,LazyOne,非常感谢!事实上,我在 PHP 代码中进行了重定向,直到你指出我才记得。感谢您的耐心解释。
    【解决方案2】:

    这应该可行:

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

    【讨论】:

    • 还是不行。它不断在地址栏中显示重写的 URL。我已经编辑了我的帖子以显示重写规则。
    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    相关资源
    最近更新 更多