我遇到了这个问题。我想把我所有的php变量都写到文件夹中。例如:
www.mypage.com/en/shows/1/
到
www.mypage.com/index.php?language=en§ion=shows&item=1
或
www.mypage.com/en/home/
到
www.mypage.com/index.php?language=en§ion=home
这就是我得到的:
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*)/(.*)/$ index.php?language=$1§ion=$2
RewriteRule (.*)/(.*)/(.*)/$ index.php?language=$1§ion=$2&item=$3
它与www.mypage.com/en/home/
至
www.mypage.com/index.php?language=en§ion=home
但是当我尝试使用www.mypage.com/en/shows/1/
www.mypage.com/index.php?language=en§ion=shows&item=1
var laguage disapears。我读了一些已在这里发布的答案,并找到了几个教程,但说实话,我不太了解。
感谢您的耐心,我是一个完整的新手。 非常感谢你。
答案 0 :(得分:0)
我认为主要问题是你的第一个RewriteRule总是匹配而不是你的第二个。与(.*)/(.*)/(.*)/$
匹配的内容也始终与(.*)/(.*)/$
匹配,因为后者并不关心它之前的内容。
理想情况下,您可能希望在开头设置^
来阻止此操作,但如果您不能或它不起作用,您可以尝试只是反转规则以便有三个规则区域有机会先匹配。虽然重写应该阻止第二个规则匹配,但最好在它们之后添加[L]
,除非你有其他原因不能。 [L]
表示如果匹配,则不会尝试匹配任何其他规则。
答案 1 :(得分:0)
试试这个
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^([a-zA-Z]{2})/(\w+)/$ index.php?language=$1§ion=$2 [L]
RewriteRule ^([a-zA-Z]{2})/(\w+)/(\d+)/$ index.php?language=$1§ion=$2&item=$3 [L]
我假设有2个字符的语言代码