你好。我是 mod_rewrite 的新手,想知道是否可以执行以下操作:
RewriteRule ^([^/]*)$ index.php?slug=$1
该规则将仅指向 index.php 但如果我想做另一条将特定 slug 指向不同脚本的规则,即
RewriteRule ^a-new-page$ different.php
这是行不通的,因为第一条规则已声明输入的任何内容都应指向索引。
有没有办法对那个特定的蛞蝓强制执行新规则?
你好。我是 mod_rewrite 的新手,想知道是否可以执行以下操作:
RewriteRule ^([^/]*)$ index.php?slug=$1
该规则将仅指向 index.php 但如果我想做另一条将特定 slug 指向不同脚本的规则,即
RewriteRule ^a-new-page$ different.php
这是行不通的,因为第一条规则已声明输入的任何内容都应指向索引。
有没有办法对那个特定的蛞蝓强制执行新规则?
是的,有可能 - 只需将此类特定规则放在通用/广泛规则之前(声明规则的顺序很重要):
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]
告诉将查询字符串附加到一个新的 URL(如果你有 URL 参数很有用:例如跟踪数据、页面参数等)。