您好。我是mod_rewrite的新手,想知道是否有可能做到以下几点:
RewriteRule ^([^/]*)$ index.php?slug=$1
此规则仅指向index.php,但是如果我想要执行另一个将特定slug指向不同脚本的规则,即
RewriteRule ^a-new-page$ different.php
这不起作用,因为第一个规则声明输入的任何内容都应该指向索引。
有没有办法强制针对该特定slu g的新规则?
答案 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]
告诉您将查询字符串附加到新网址(如果您有网址参数,则非常有用:例如跟踪数据,网页参数等)。