【问题标题】:htaccess rewrite rule, remove question markhtaccess 重写规则,去掉问号
【发布时间】:2012-12-07 10:21:54
【问题描述】:

假设我有以下网址:

http://example.com/?param

我应该如何从 URL 中删除问号,即。重写

http://example.com/param

到这样的事情:

http://example.com/index.php?param

这是我的代码,它不起作用:

RewriteEngine On
RewriteRule ^(.*)$ /index.php?$1 [P]

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    需要发生两件完全不同的事情。首先,您需要从外部重定向浏览器以在 URL 地址栏中显示不同的内容。其次,当浏览器重新发送第二个请求时,服务器在内部重写查询字符串。您不能随意添加或删除 URL 中的内容,因为它们是 定位器。您可以创建一个新定位器,告诉浏览器使用这个新定位器而不是旧定位器,然后在服务器内部将新定位器改回旧定位器。

    top part of this answer for an explanation

    让浏览器转到新的 URL:

    RewriteEngine On
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(index\.php)?\?([^&\ ]+)
    RewriteRule ^ /%1? [L,R=301]
    

    这需要一个 URL 请求:http://example.com/?something 并将浏览器重定向到 URL:http://example.com/something

    然后你需要在内部重写它:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?$1 [L]
    

    当请求http://example.com/something 时,服务器将URI 重写为/index.php?something。这是服务器内部的,因此浏览器对此一无所知,并会在服务器处理 URI /index.php?something 时继续显示 URL http://example.com/something

    【讨论】:

    • 谢谢你。有大量类似问题的答案无法解释在这种情况下需要发生两件事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多