【问题标题】:Removing GET parameter in .htaccess and get 2 URLs删除 .htaccess 中的 GET 参数并获取 2 个 URL
【发布时间】:2021-09-19 09:32:12
【问题描述】:

我有这种网址:

http://www.example.com/index.php?page=contest&contest=this-one-contest

我正在尝试在这里获取 2 个正常工作的网址。

  1. 我想要做的是获取这种 URL:

    http://www.example.com/contest

使用这个 htaccess 重写规则已经完成了

RewriteRule ^([a-z_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$1 [L,QSA]
RewriteRule ^([a-z_-]+)$ index.php?page=$1 [L,QSA]
RewriteRule ^([a-z_-]+)/$ index.php?page=$1 [L,QSA]
  1. 我要做的是在第二个 URL 中获取这种 URL:

    http://www.example.com/contest/this-one-contest

我不知道这是否可以使用 htaccess,而且我不想创建一个名为“contest”的新文件夹。

我已经试过了,但还是不行。

RewriteRule ^([a-z_-]+)contest/([a-zA-Z0-9_-]+)$ index.php?page=$1&contest=$2 [L,QSA]
RewriteRule ^([a-z_-]+)contest/$ index.php?page=$1 [L,QSA]
RewriteRule ^([a-z_-]+)contest/$ index.php?page=$1 [L,QSA]

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    我终于找到了适合我的解决方法,我对@arkascha 解决方案进行了很多自我调整,

    RewriteEngine on 
    RewriteRule ^/?([a-z_-]+)/([a-zA-Z0-9_-]+)/?$ /index.php?page=$1&contest=$2 [L,QSA] 
    RewriteRule ^([a-z_-]+)/$ index.php?page=$1 [L,QSA] 
    RewriteRule ^/?contest/?$ /index.php?contest=1$ [L,QSA]
    

    【讨论】:

      【解决方案2】:

      您不必使用两步方法,您可以使用非常通用的方法立即重写:

      RewriteEngine on
      RewriteRule ^/?([a-z_-]+)/([a-zA-Z0-9_-]+)/?$ /index.php?page=$1&contest=$2 [L,QSA]
      RewriteRule ^/?([a-z_-]+)/?$ /index.php?page=$1 [L,QSA]
      

      这当然假设没有其他潜在的 URL 与您想要处理不同的相同模式匹配......因此,如果您只希望在 URL 以 /content/ 开头时应用这些规则,那么该变体应该做:

      RewriteEngine on
      RewriteRule ^/?contest/([a-zA-Z0-9_-]+)/?$ /index.php?page=contest&contest=$1 [L,QSA]
      RewriteRule ^/?contest/?$ /index.php?page=contest [L,QSA]
      

      当然,如果第二个参数也是一个文字,固定的你想要做出反应,那么你可以得到更具体:

      RewriteEngine on
      RewriteRule ^/?contest/this-one-contest/?$ /index.php?page=contest&contest=this-one-contest [L,QSA]
      RewriteRule ^/?contest/?$ /index.php?page=contest [L,QSA]
      

      【讨论】:

      • 它有效,但我做了很多自我调整,这对我有用RewriteEngine on RewriteRule ^/?([a-z_-]+)/([a-zA-Z0-9_-]+)/?$ /index.php?page=$1&contest=$2 [L,QSA] RewriteRule ^([a-z_-]+)/$ index.php?page=$1 [L,QSA] RewriteRule ^/?contest/?$ /index.php?contest=1$ [L,QSA]
      • 当然,很好,您找到了解决方案。但是请注意,如果我的 /?$ 仅在请求中确实有斜杠时,/$ 将匹配。正如我在回答中建议的那样,我总是认为这是可选的。您添加的最后一条规则与您的要求没有任何关系。这似乎是一些额外的要求。
      猜你喜欢
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多