我尝试并尝试了这里发布的示例,但我没有设法使我的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都会重定向到主页。
非常感谢所有帮助。
答案 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]