2012-02-17 74 views
2

我得到了这个问题。我想写所有我的php变量文件夹。例如:.htaccess,将所有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在前看不见。我读了一些已经发布在这里的答案,并找到了一些教程,但说实话我不太了解。

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

回答

0

我认为主要问题是您的第一个RewriteRule将总是匹配而不是第二个。与(.*)/(.*)/(.*)/$匹配的东西也总是与(.*)/(.*)/$匹配,因为后者不关心之前发生的事情。

理想情况下,您希望在开始时使用^来停止此操作,但如果您无法或无法正常工作,则可以尝试颠倒这些规则,以使具有三个区域的规则得到首先匹配的机会。虽然重写应该防止第二个规则匹配,但是最好在它们之后添加[L],除非有另一个原因,否则它们是不可以的。 [L]表示如果匹配,则不会尝试匹配任何其他规则。

+0

感谢您的解释里克。我将学习语法和不同的值。谢谢你的时间。 – 2012-02-18 00:28:35

0

试试这个

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个字符的语言代码

+0

它似乎完美地工作!非常感谢你!!!! – 2012-02-18 00:26:26