.htaccess url用两个变量重写

时间:2013-11-09 19:09:56

标签: .htaccess mod-rewrite

我尝试并尝试了这里发布的示例,但我没有设法使我的htaccess正常运行。

情况如下: 我的链接看起来像这样

domain.com/sport/football/index.php?lang_id=1&page_id=500(主页) domain.com/sport/football/index.php?lang_id=1&page_id=505(玩家) domain.com/sport/football/index.php?lang_id=1&page_id=510(教练)......

我想将它们重命名为

domain.com/sport/football/

domain.com/sport/football/players/

domain.com/sport/football/coaches/

...等 并且所有未指定的page_id都会重定向到主页。

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:0)

在文档根目录的htaccess文件中,添加:

RewriteEngine On
RewriteRule ^sport/football/$ /sport/football/index.php?lang_id=1&page_id=500 [L,QSA]
RewriteRule ^sport/football/players/?$ /sport/football/index.php?lang_id=1&page_id=505 [L,QSA]
RewriteRule ^sport/football/coaches/?$ /sport/football/index.php?lang_id=1&page_id=510 [L,QSA]

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /sport/football/index\.php
RewriteCond %{QUERY_STRING} ^(.*)page_id=500($|&)
RewriteRule ^ /sport/football/? [L,R=301]

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /sport/football/index\.php
RewriteCond %{QUERY_STRING} ^(.*)page_id=505($|&)
RewriteRule ^ /sport/football/players/? [L,R=301]

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /sport/football/index\.php
RewriteCond %{QUERY_STRING} ^(.*)page_id=510($|&)
RewriteRule ^ /sport/football/coaches/? [L,R=301]

答案 1 :(得分:0)

您可以使用RewriteMap Directive。您必须定义从名称到ID的映射

players 505
coaches 510

告诉Apache有关地图的信息

RewriteMap football txt:/path/to/footballmap.txt

RewriteMap必须位于主配置文件中或VirtualHost指令内。

现在您可以使用此地图

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^sport/football/(.*)/?$ /sport/football/index.php?lang_id=1&page_id=${footballmap:$1|500} [L]

如果找不到密钥,将使用默认的500(主页)。如果你有很多映射,你也可以使用一个哈希文件。

更新

如果您无权访问服务器或虚拟主机配置文件,则只能拥有固定的RewriteRule“地图”

RewriteRule ^sport/football/players/?$ /sport/football/index.php?lang_id=1&page_id=505 [L]
RewriteRule ^sport/football/coaches/?$ /sport/football/index.php?lang_id=1&page_id=510 [L]
# maybe other similar rules ...
# this is a catch everything else and must come last
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^sport/football/ /sport/football/index.php?lang_id=1&page_id=500 [L]