【问题标题】:mod_rewrite a double directorymod_rewrite 双目录
【发布时间】:2012-03-21 11:08:28
【问题描述】:

我在.htaccess 中使用mod_rewrite 将双目录结构更改为双GET 查询字符串,如下所示:

网址:http://domain.com/test/me/

mod_rewrite 后:http://domain.com/index.php?u=test&c=me

在我的.htaccess 文件中使用以下代码:

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)/$ /index.php?u=$1&c=$2 [L]

这很好用,但如果没有指定第二个目录(例如http://domain.com/test/),我希望c 变量等于“all”,如下所示:

http://domain.com/index.php?u=test&c=all

我该怎么做? 谢谢,正则表达式对我来说就像克林贡诗歌。我尝试了上述代码的几种不同变体,但均未成功。

附:如果您可以添加尾随 /,即使没有在 url 框中输入,也可以加分,因此 http://domain.com/test/me 的处理方式与 http://domain.com/test/me/ 相同,http://domain.com/test 的处理方式与 http://domain.com/test/ 相同

【问题讨论】:

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


    【解决方案1】:

    像这样?

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]*)\/?$ index.php?u=$1&c=all
    RewriteRule ^([^/]*)/([^/]+)\/?$ index.php?u=$1&c=$2 [L]
    

    还有奖金:P

    【讨论】:

    • 看来我说得太早了。出于某种原因,当我将两个重写器都放在那里时,它会破坏我的脚本。它开始抛出 Unexpected
    • 看起来第二条规则正在尝试重写我的脚本包含,例如,如果我有 "
    • 尝试添加“RewriteCond %{REQUEST_FILENAME} !-f”和“RewriteCond %{REQUEST_FILENAME} !-d”以忽略现有文件/目录。
    • 我们快到了!我已经用我当前的代码更新了你上面的答案(你上面的 rewritecond 在第二个 rewriterule 之上。现在的问题是 domain.com/test 没有被重写为 index.php?u=test&c=all (尽管 domain.com/test 工作正常很好)...
    • 我在本地测试了一下并更新了答案,现在应该可以工作了:)
    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多