2011-06-22 46 views
2

我在摆弄.htaccess和mod_rewrite。我有一个具有两种类型的网址,我想重写网站:htaccess有条件重写

  • /index.php?nav=$2
  • /index.php?nav=41&intNewsId=$3 - 41是静态的,新闻导航始终是41

我想重写它们于:

  • /pagename/id
  • /news/pagename/id

我已经发了条说代码工作,但如果我添加的最后一行的第二线停止工作,并我能想象那是因为在第三块中的条件也为第二块如此。但我不知道如何正确使用条件。 (两个块工作个人)

Options +FollowSymlinks 
RewriteEngine on 

# Reroute rules that end on/
RewriteRule ^(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$ /$1/$2/ [R] 

# Make the system understand pagename/96 
RewriteRule ^(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])/$ /index.php?nav=$2 

# Make the system understand news/pagename/99 
RewriteRule ^(.*)\/(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])/$ /index.php?nav=41&intNewsId=$3 

我什么都试过了我能想到的,但我不是太熟悉,打字或htaccess的条件块的这个表达式风格。

解决方案: 我修好了我自己的代码,我只是剥离了第二$这样的条件didnt与最后一个

Options +FollowSymlinks 
RewriteEngine on 

# Reroute rules that end on/
RewriteRule ^(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$ /$1/$2/ [R] 

# Make the system understand pagename/96 
RewriteRule ^(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])/ /index.php?nav=$2 

# Make the system understand news/pagename/99 
RewriteRule ^(.*)\/(.*)\/([0-9]|[1-9][0-9]|[1-9][0-9][0-9])/$ /index.php?nav=41&intNewsId=$3 

谢谢你的答案全部扰!

+0

为什么这个投票题外话? –

+0

另外,注意你可以通过使用'(\ d +)'来避免这些'[0-9]'结构的笨拙,它捕获任何一个或多个数字的块。 –

+0

噢,谢谢你的意见。注意我的([0-9] | [1-9] [0-9] | [1-9] [0-9] [0-9]),之前更糟:D –

回答

1

试试这个:

RewriteRule ^news/.+/([^/]*)$ /index.php?nav=41&intNewsId=$1 [L] 
RewriteRule ^.+/([^/]*)$ /index.php?nav=$1 [L] 
+0

谢谢你。使用这个我也得到了它的工作:D一天学习^^ –

+0

@汉斯Wassink:不客气!如果我的答案解决了您的问题,请考虑通过点击答案左侧的投票计数下方的勾号来接受它。 – Shef

+0

滴答答答! –

0

试试这个:

# Make the system understand pagename/96 
RewriteCond %{REQUEST_URI} ^/pagename/([0-9]*) 
RewriteRule .* /index.php?nav=%1 

# Make the system understand news/pagename/99 
RewriteCond %{REQUEST_URI} ^/news/pagename/([0-9]*) 
RewriteRule .* /index.php?nav=41&intNewsId=%1 
+0

谢谢你,使用这个它工作(我改变页面到一个multichar正则表达式检查) 我修复了我自己的代码工作太btw,我刚刚剥离第二个$,所以条件没有干扰最后一个 –

+0

对于记录,'RewriteCond'语句可以用适当的'RewriteRule's :) :) –

+0

@Hans Wassink很高兴它的工作。按条件编写规则总是好的,这使得它更有效率。 –

1

另一种方法,也许稍微更简洁:

RewriteRule ^pagename/(\d+)$ index.php?nav=$1 
RewriteRule ^news/pagename/(\d+)$ index.php?nav=41&intNewsId=$1