【问题标题】:.htaccess, Rewriting ALL PHP Vars to folders.htaccess,将所有 PHP 变量重写到文件夹
【发布时间】:2012-03-09 08:41:36
【问题描述】:

我遇到了这个问题。我想将我所有的 php 变量写入文件夹。例如:

www.mypage.com/en/shows/1/

www.mypage.com/index.php?language=en&section=shows&item=1

www.mypage.com/en/home/

www.mypage.com/index.php?language=en&section=home

这是我得到的:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*)/(.*)/$ index.php?language=$1&section=$2
RewriteRule (.*)/(.*)/(.*)/$ index.php?language=$1&section=$2&item=$3

它与www.mypage.com/en/home/ 完美配合

www.mypage.com/index.php?language=en&section=home

但是当我尝试使用www.mypage.com/en/shows/1/

www.mypage.com/index.php?language=en&section=shows&item=1

var laguage 消失了。我阅读了一些已经在这里发布的答案并找到了一些教程,但说实话我不太了解。

感谢您的耐心等待,我是一个完全的新手。 非常感谢。

【问题讨论】:

    标签: php .htaccess mod-rewrite get variables


    【解决方案1】:

    试试这个

    Options +FollowSymLinks
    RewriteEngine on
    RewriteBase / 
    
    RewriteRule ^([a-zA-Z]{2})/(\w+)/$ index.php?language=$1&section=$2 [L]
    RewriteRule ^([a-zA-Z]{2})/(\w+)/(\d+)/$ index.php?language=$1&section=$2&item=$3 [L]
    

    我假设是 2 个字符的语言代码

    【讨论】:

      【解决方案2】:

      我认为主要问题是您的第一个 RewriteRule 将始终匹配,而不是您的第二个。匹配(.*)/(.*)/(.*)/$ 的东西也总是匹配(.*)/(.*)/$,因为后者不关心它之前的内容。

      理想情况下,您希望在开头添加 ^ 以阻止此操作,但如果您不能或它不起作用,您可以随时尝试颠倒规则,以便具有三个区域的那个有机会先匹配。尽管重写应该阻止第二条规则匹配,但最好在它们之后添加[L],除非有其他原因不能匹配。 [L] 表示如果匹配,则不会尝试匹配任何其他规则。

      【讨论】:

      • 感谢瑞克的解释。我将研究语法和不同的值。感谢您的宝贵时间。
      猜你喜欢
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2017-08-13
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多