【问题标题】:RewriteRule in .htaccess showing rewritten url in address bar.htaccess 中的 RewriteRule 在地址栏中显示重写的 url
【发布时间】:2012-01-24 02:53:22
【问题描述】:

抱歉,如果以前有人问过这个问题,但我已经到处寻找答案,但我一直无法找到令人满意的解决方案。

我的 httpdocs 中有以下 .htaccess 文件:

Options +FollowSymlinks
RewriteEngine on

RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/users/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.+)$ users/$1 [L]

这会将“www.example.com/joebloggs”正确映射到“www.example.com/users/jobloggs”,并正确显示相应的索引页面。

问题是“www.example.com/users/jobloggs”显示在地址栏中,而不是原始(短)网址。非常感谢您对此提供任何帮助。

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    如果您说它正在加载DirectoryIndex 文件(例如index.html / index.php),那么我会说RewriteRule 替换中缺少尾部斜杠是问题所在。尝试类似:

    RewriteRule ^(.+?)/?$ users/$1/ [L]
    

    【讨论】:

    • 谢谢!添加斜线确实可以解决地址栏问题。但是,正如您在回答中可能提到的那样,规则仍然不太正确。我现在无法导航到其他页面,因为单击链接会将我带到 www.example.com/thelink.html 而不是 www.example.com/joebloggs/thelink.html。
    • 您的源代码中有什么网址?你有/thelink.html吗?
    • 每个用户目录下基本上都有一个完整的站点。使用我现在拥有的 RerwiteRule,如果我浏览到 www.example.com/joebloggs,我可以看到索引页面,但无法浏览该站点。如果我浏览到 www.example.com/joebloggs/(注意尾部斜杠),它工作正常。
    • 听起来您的源代码中有与文档 URL 相关的 URL,例如:<a href="thelink.html"><a href="./thelink.html">。如果是这种情况,那么尾部斜杠对于浏览器如何解析链接很重要,因此您可能应该进行外部重定向以确保包含它。如果没有尾部斜杠,它将尝试相对于整个站点的基本 URL 解析它们。使用尾部斜杠,它将相对于/joebloggs/,例如/joebloggs/thelink.html。或者在您的源代码中使用像 /joebloggs/thelink.html 这样的 URL。
    • 对不起,我想你把我弄丢了。我不想修改源链接。但我也不希望浏览器显示该站点位于 /users 下。
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2014-08-17
    • 2014-02-27
    • 2013-01-12
    相关资源
    最近更新 更多