【问题标题】:Problem with htaccess GET form variables in a rewritten url重写 url 中的 htaccess GET 表单变量的问题
【发布时间】:2011-09-11 16:25:51
【问题描述】:

基本上我的问题是这样的;我有一个 MVC 系统,可以将所有请求重定向到我网站上的 index.php。我的 htaccess 文件中有一个重写规则来处理这些请求,如下所示:

RewriteRule ^([a-zAZ\_\-]+)\/([a-zA-Z\_\-]+)\/([^\/?]*) /?module=$1&class=$2&event=$3

将网址翻译成这些类型的网址

http://example.com/users/login/
http://example.com/users/info/me

我的问题是我还希望像这样在 URL 中应用和使用 GET 变量

http://example.com/users/login/?var1=val1&var2=val2
http://example.com/users/info/me?var1=val2...

我已经编写了两个不同的正则表达式,它们在我的工作台 (expresso) 中运行良好,我已经在 PHP 中对它们进行了测试,但是它们拒绝在 htaccess 中运行。它们不是特别复杂,我试过了:

^([a-zAZ_\-]+)\/([a-zA-Z_\-]+)\/([^\/\?]*)[\?]*(.*) /?module=$1&class=$2&event=$3&$4
and
^([a-zAZ_\-]+)\/([a-zA-Z_\-]+)\/([^\/\?]*)(?(?=\?)\?(.+)) /?module=$1&class=$2&event=$3&$4

这些都不起作用,我绞尽脑汁想知道为什么。从本质上讲,它只是不识别第四组并且没有返回任何东西

对此的任何帮助将不胜感激,因为这让我发疯了。

提前致谢, 鲁珀特 S.

【问题讨论】:

    标签: regex .htaccess mod-rewrite url-rewriting get


    【解决方案1】:

    毕竟,这是你需要的:

    RewriteRule ^([a-z_-]+)/([a-z_-]+)/([^/?]*) /?module=$1&class=$2&event=$3 [QSA,NC,L]
    

    [QSA] 会将额外的 GET 参数附加到重写的查询字符串中。

    [NC] 因为它不区分大小写,所以不需要 A-Z 匹配

    【讨论】:

    • 您好,感谢您的回答,但问题仍然存在,额外的 GET 变量未显示在范围内。我错过了 [DC] 位。这是我正在做的内部重定向,我有一个设置可以工作,但不允许您向其中添加“额外”获取变量。重写规则 ^([a-zAZ_\-]+)\/([a-zA-Z_\-]+)\/([^\/]*) /?module=$1&class=$2&event=$3 [NC]是原来的。我希望能够在该特定调用中添加“即时”变量,即 example.com/forum/thread/?showPostNumber=1&threadId=123 其中 forum 是模块,thread 是类,但添加的变量与该模块交互
    • 为什么要让模块、类等get参数可见?这种方式要复杂得多。 [QSA] 标志允许您将额外的查询字符串附加到重写的 url,但我在回答中写的内容不会用 get 参数重写任何内容。
    • 我不希望模块类和事件参数可见,我希望所有其他 GET var 可见,我希望它像我给出的示例一样,即在 url 栏中显示为/forum/thread/ 内部是 /?module=forum&class=thread 和 /forum/thread/?threadId=123&showpostHeader=1 内部是 /?module=forum&class=thread&threadId=123&showpostHeader=1 我希望特定于该模块的变量作为常规 GET 变量可见
    • 啊太棒了,刚刚使用了 QSA 标志,它正在做我想做的事,非常感谢 :)
    • 我也改变了我的答案,现在我明白了你想要什么;)
    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    相关资源
    最近更新 更多