.htaccess,将所有PHP Vars重写到文件夹

时间:2012-02-17 23:26:47

标签: php .htaccess mod-rewrite get variables

我遇到了这个问题。我想把我所有的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 disapears。我读了一些已在这里发布的答案,并找到了几个教程,但说实话,我不太了解。

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

2 个答案:

答案 0 :(得分:0)

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

理想情况下,您可能希望在开头设置^来阻止此操作,但如果您不能或它不起作用,您可以尝试只是反转规则以便有三个规则区域有机会先匹配。虽然重写应该阻止第二个规则匹配,但最好在它们之后添加[L],除非你有其他原因不能。 [L]表示如果匹配,则不会尝试匹配任何其他规则。

答案 1 :(得分: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个字符的语言代码