【问题标题】:overriding url rewriting for $_GET variables覆盖 $_GET 变量的 url 重写
【发布时间】:2012-04-12 22:12:54
【问题描述】:

我的管理系统中有一个页面,路径如下:

http://192.168.1.253/xxxxxx/admin/view/news-items/issue/3

我正在尝试重写它以使其指向:

http://192.168.1.253/xxxxxx/admin/view/news-items.php?issue=3

但是我似乎无法让它工作,因为页面显示但 php 无法检测到 $_GET 变量。我有 2 个 .htaccess 文件,一个在 xxxxxx 目录中,一个在 admin 目录中。他们在这里:

xxxxxx:

RewriteEngine On    # Turn on the rewriting engine

RewriteRule  ^([^/.]+)/delete/(1-9)/?$ $1.php?delete=$2 [L]
RewriteRule  ^([^/.]+)/?$ $1.php [L] # rewrite without query string parameters
RewriteRule  ^([^/.]+)/([^/.]+)/?$ $1.php\#$2 [L] # one name string parameter

管理员:

RewriteEngine On    # Turn on the rewriting engine

RewriteRule  ^([^/.]+)/?$ $1.php [L] # rewrite without query string parameters
RewriteRule  ^([^/.]+)/(\d+)/?$ $1.php?id=$2 [L] # one id parameter
RewriteRule  ^([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)/issue/(\d+)/?$ $1.php?issue=$2 [L] # one issue parameter
RewriteRule  ^([^/.]+)/(\d+)/(\d+)/?$ $1.php?id=$2&file_id=$3 [L] # two parameters

编辑

这是新代码:

xxxxxx:

RewriteEngine On    # Turn on the rewriting engine

#RewriteRule  ^([^/.]+)/delete/(\d+)/?$ $1.php?delete=$2 [L,QSA]
RewriteRule  ^([^/.]+)/?$ $1.php [L,QSA] # rewrite without query string parameters
RewriteRule  ^([^/.]+)/([^/.]+)/?$ $1.php\#$2 [L,QSA] # one name string parameter

管理员:

RewriteEngine On    # Turn on the rewriting engine

#RewriteRule  ^([^/.]+)/?$ $1.php [L,QSA] # rewrite without query string parameters
#RewriteRule  ^([^/.]+)/(\d+)/?$ $1.php?id=$2 [L,QSA] # one id parameter
RewriteRule  ^([^/.]+)/([^/.]+)/([^/.]+)/([^/.]+)/issue/(\d+)/?$ $1.php?issue=$2 [L,QSA] # one issue parameter
RewriteRule  ^([^/.]+)/(\d+)/(\d+)/?$ $1.php?id=$2&file_id=$3 [L,QSA] # two parameters

【问题讨论】:

    标签: .htaccess mod-rewrite get


    【解决方案1】:

    您需要在重写规则中包含[QSA] 标志:

    RewriteRule  ^([^/.]+)/delete/(1-9)/?$ $1.php?delete=$2 [L,QSA]
    RewriteRule  ^([^/.]+)/?$ $1.php [L,QSA] # rewrite without query string parameters
    # etc.
    

    来自documentation

    修改查询字符串

    默认情况下,查询字符串原封不动地传递。但是,您可以在包含查询字符串部分的替换字符串中创建 URL。只需在替换字符串中使用问号来指示应将以下文本重新注入到查询字符串中。当您想删除现有的查询字符串时,只用问号结束替换字符串。要组合新旧查询字符串,请使用 [QSA] 标志。

    【讨论】:

    • 在我将 QSA 添加到每个规则之后,它仍然在做同样的事情:/。请参见上文。
    • @Phil 请将,R=302 添加到标志中——这将进行临时重定向——以便您在浏览器地址栏中看到重写的 URL。如果它被正确重写但你仍然无法获得这些变量,那么它要么是其他地方的一些规则......要么是你的 PHP 脚本中的一些代码(可能是其他原因,这两个更有可能)。
    猜你喜欢
    • 2011-07-07
    • 2014-02-04
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2014-06-23
    相关资源
    最近更新 更多