使用Mod_Rewrite使用多个友好URL

时间:2017-04-09 02:25:00

标签: apache .htaccess url mod-rewrite

我能够使用此代码获取网址

RewriteRule ^(.*)/([^/\.]+)/?$ $1/index.shtml?dynContent=$2 [L]

所以dynContent =苹果或香蕉或香蕉苹果

因此,如果我输入http://example.com/dir1/apples或/ dir1 / bananas或/ dir1 / bananas-apples,它会显示正确的内容,我会将其显示为index.shtml

但是我有一个页面需要是完整页面,我有一个页面配置为完整页面,它被命名为indexFP.shtml

这一页的dynContent = oranges

我将RewriteRule作为

RewriteRule ^(.*)/([^/\.]+)/?$ $1/indexFP.shtml?dynContent=$2 [L]

但这并没有为这一页调出正确的整页页面.....

当我输入http://example.com/dir1/oranges时,它使用index.shtml而不是indexFP.shtml

有办法做到这一点吗?这就是我现在所拥有的。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/([^/\.]+)/?$ $1/index.shtml?dynContent=$2 [L]
RewriteRule ^(.*)/([^/\.]+)/?$ $1/indexFP.shtml?dynContent=$2 [L]

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

[L]表示mod_rewrite中的“last”。这会停止处理,因此上面的indexFP规则永远不会受到影响。

我认为您要做的是为某些字符串选择index,为其他字符串选择indexFP。要做到这一点,你需要一种方法来选择一个规则而不是另一个。我的重写是有点生疏,但有点像:

# match "oranges"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /oranges/
RewriteRule ^(.*)/([^/\.]+)/?$ $1/indexFP.shtml?dynContent=$2 [L]

# match everything else
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/([^/\.]+)/?$ $1/index.shtml?dynContent=$2 [L]