0

你好。我是 mod_rewrite 的新手,想知道是否可以执行以下操作:

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

该规则将仅指向 index.php 但如果我想做另一条将特定 slug 指向不同脚本的规则,即

RewriteRule ^a-new-page$ different.php

这是行不通的,因为第一条规则已声明输入的任何内容都应指向索引。

有没有办法对那个特定的蛞蝓强制执行新规则?

4

1 回答 1

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]告诉将查询字符串附加到一个新的 URL(如果你有 URL 参数很有用:例如跟踪数据、页面参数等)。

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

于 2011-07-04T14:39:38.080 回答