mod.rewrite多个规则相同目录

时间:2013-03-06 00:39:35

标签: php apache mod-rewrite

我正在使用以下代码......

#Fix Rewrite
Options -Multiviews

# Mod Rewrite
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)?$ index.php?q=$1 [L]

www.website.com/index.php?q=Keyword变为www.website.com/Keyword

哪个很好......但是......

我也(在同一目录中)有一个名为spec.php的文件,该文件接受GET的{​​{1}}变量。

我还需要一条将eid转换为www.website.com/spec.php?eid=00000www.website.com/00000的规则,而不会将www.website.com/spec/00000移动到子目录中。

任何帮助都会非常感激,我的眼睛有谷歌烧伤。我找到了一些类似的东西,但是当我试图将它与我的情况相匹配时,我遇到了问题。

1 个答案:

答案 0 :(得分:0)

这一行

RewriteRule ^(.*)?$ index.php?q=$1 [L]

匹配所有内容,如果您希望website.com/Keyword工作且website.com/spec/0000正常工作,那么您需要添加其他条件

我认为这会起作用

RewriteRule ^/spec/(.+)$ /spec.php?eid=$1 [L]
RewriteRule ^(.*)?$ /index.php?q=$1 [L]

这是什么意思?

第一部分是正则表达式,第二部分是映射它的URL,最后一部分是标志。在这个例子中,我们首先将/spec/条件置于首先,因为第二个条件将与其他所有条件匹配,然后确保[L]标志设置为告知mod_rewrite在当前条件下停止匹配。