2013-11-09 75 views
0

我试着用这里发布的示例尝试过,但我没有设法让我的htaccess正常运行。.htaccess url用两个变量重写

这里的情况: 我有看起来像这样的链接

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

在你的文档根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] 
+0

谢谢乔恩,它是做一些改写,但不是我想要的。 当我输入除家庭以外的页面的新网址时,出现404错误,并且我重定向到/ sport/football /当我尝试到达家中时。 请注意,目录中的默认页面是index.html,而不是index.php。对不起,我忘了提及 – Aleks

0

您可以使用RewriteMap Directive了点。你必须从名称定义映射到IDS

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] 
+0

添加RewriteMap只会给我500错误。我尝试了完整路径,甚至只是文件名,因为我已经把它放在同一个文件夹中。 – Aleks

+0

你说得对,我只是重读了[docs](http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap),并且RewriteMap只允许在服务器配置或虚拟主机指令中使用。我还修复了第二个错误,即缺少“RewriteCond”。请参阅最新的答案。 –

+0

不幸的是,我没有访问服务器配置或虚拟主机配置文件。 – Aleks