mod_rewrite条件的基本帮助

时间:2011-07-04 13:58:45

标签: mod-rewrite restful-url

您好。我是mod_rewrite的新手,想知道是否有可能做到以下几点:

RewriteRule ^([^/]*)$ index.php?slug=$1

此规则仅指向index.php,但是如果我想要执行另一个将特定slug指向不同脚本的规则,即

RewriteRule ^a-new-page$ different.php

这不起作用,因为第一个规则声明输入的任何内容都应该指向索引。

有没有办法强制针对该特定slu g的新规则?

1 个答案:

答案 0 :(得分:1)

是的,有可能 - 只需将此类特定规则放在通用/宽泛规则之前(规则被宣布为重要的顺序):

RewriteRule ^a-new-page$ different.php
RewriteRule ^([^/]*)$ index.php?slug=$1

另外请注意广泛的规则 - 它们可能会进入重写循环(重写新URL进入下一次迭代后,如果规则未正确写入,它可能会进入无限循环,Apache将不得不强行终止您的用户将看到500错误页面)。更好的规则是:

# specific rule
RewriteRule ^a-new-page$ different.php [L,QSA]

# broad rule (will be triggered if requested resource is not a file or directory) 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ index.php?slug=$1 [L,QSA]
  • [L]告诉Apache如果此规则匹配则停止重写
  • [QSA]告诉您将查询字符串附加到新网址(如果您有网址参数,则非常有用:例如跟踪数据,网页参数等)。

有用的链接:http://httpd.apache.org/docs/current/rewrite/