使用mod_rewrite处理用户的地址栏

时间:2014-10-25 18:51:45

标签: apache .htaccess mod-rewrite installation

我在example.com/themizer.php有一个页面,但我希望它看起来实际上位于example.com/themizer/(或example.com/themizer/index.php)用于所有实际目的。我知道如何基本上使用mod_rewrite为它创建别名,但是如何让用户被重定向到该别名呢?示例:用户请求example.com/themizer.php,其浏览器中的地址变为example.com/themizer/ 而不实际重定向。这可能吗?

1 个答案:

答案 0 :(得分:0)

使用服务器端配置,您只能通过重定向完成此操作。这不一定是个问题。只需确保您网站上的网址指向花哨的网址,而不是内部网址。否则,您生成许多必须重定向的请求,而不是仅重定向以其他方式进入的奇数请求(例如,通过外部旧URL或旧书签)。你这样做:

#External redirect
RewriteCond %{THE_REQUEST} ^GET\ /themizer\.php\ HTTP
RewriteRule ^themizer\.php$ /themizer/ [R,L]

#Internal rewrite
RewriteRule ^themizer/?$ themizer.php [L]

如果你真的必须,你可以使用javascript将新窗口状态“推送”到历史记录中,更新地址栏。这会导致浏览器中的“转到上一页”按钮包含虚假内容。换句话说:转到上一页不能按预期工作,我不建议这样做,因为有更好的选择。您可以在支持它的浏览器中使用以下javascript语句来执行此操作:

window.history.pushState( null, document.title, "/themizer" );