RewriteRule lang和页面参数

时间:2015-09-13 08:46:17

标签: php .htaccess mod-rewrite

我尝试了本网站提出的所有解决方案,但没有任何效果。

这就是我所做的:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /folder/

RewriteRule ^([a-z]{2})$ index.php?lang=$1 [L]
RewriteRule ^([^/]*)$ index.php?page=$1 [L]
RewriteRule ^([a-z]{2})/([^/]*)$ index.php?lang=$1&page=$2 [L]

实质上,我想以这种格式访问页面:

website.com/en
website.com/en/download
website.com/download

并翻译为:

website.com/index.php?lang=en
website.com/index.php?lang=en&page=download
website.com/index.php?page=download

任何解决方案?

感谢。

2 个答案:

答案 0 :(得分:2)

您的第一个和最后一个规则很好,但是对于最后一个选项 - 没有语言文件夹的页面 - 您只需将其重定向到index.php并确保没有另外的重复,以下列方式

RewriteRule ^([a-z]{2})/(.*)$ index.php?lang=$1&page=$2 [L]
RewriteRule ^([a-z]{2})$ index.php?lang=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L]

答案 1 :(得分:2)

我刚刚在我的开发服务器上测试了以下规则,它们似乎达到了你想要的效果。

RewriteBase /folder/
RewriteRule ^([a-zA-Z]{2})$ index.php?lang=$1 [NC,L]
RewriteRule ^([a-zA-Z]+)$ index.php?page=$1 [NC,L]
RewriteRule ^([a-z]{2})/([a-zA-Z]+)$ index.php?lang=$1&page=$2 [NC,L]

在用于测试的脚本/folder/index.php中:

<?php
    print_r($_GET);
?>

网址示例:

https://localhost/en/
    ->  Array ( [lang] => en )

https://localhost/download/
    ->  Array ( [page] => download ) 

https://localhost/en/download/
    ->  Array ( [lang] => en [page] => download )