0

我在使用以下规则重写 URL 时遇到了一些问题

RewriteEngine on

RewriteRule ^page/(.*)$ index.php?pag=cms&title=$1 [NC]
RewriteRule ^admin/(.*)$ admin/$1 [NC]
RewriteRule ^(.*)$ index.php?pag=$1 [NC,L]

我想要实现的是检查 URL 是否是 cms 页面,并保持管理 URL 不变。如果我删除最后一个条件,它会起作用,但我不会有非 cms 页面的规则。

理想情况下,我希望每个页面(无论是否为 cms)都只有一个规则,但除了page/在 URL 中使用之外,我不知道如何检查它。

4

2 回答 2

1

Mod_rewrite 将继续循环遍历所有规则,直到 URI 停止更改(或达到其内部重定向限制,导致 500 错误)。您需要在最后一条规则中添加一些条件,这样它就不会重写已经正确路由的 URI:

RewriteRule ^page/(.*)$ index.php?pag=cms&title=$1 [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?pag=$1 [NC,L]

此外,第二条规则除了传递之外什么都不做,因此您可以将其替换为

RewriteRule ^admin/(.*)$ - [NC,L]
于 2013-07-31T06:57:37.693 回答
0

你需要这些规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Apache 文档

'-d' (is directory)
Treats the TestString as a pathname and tests whether or not it exists, and is a directory.
'-f' (is regular file)
Treats the TestString as a pathname and tests whether or not it exists, and is a regular file.
于 2013-07-31T06:54:19.920 回答