2013-03-06 125 views
1

我使用下面的代码...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=Keywordwww.website.com/Keyword

伟大的工程....但是....

我也(在同一目录中)有一个名为spec.php的文件,它接受GET变量eid

我还需要有一个转www.website.com/spec.php?eid=00000www.website.com/00000www.website.com/spec/00000无需实际移动spec.php到子目录中的规则。

任何帮助将非常感激,我的眼睛有谷歌烧伤。我发现有些做了类似的事情,但是当我尝试将它与我的情况相匹配时,我遇到了问题。

+0

“将”www.website.com/index.php?q = Keyword“变成”www.website.com/Keyword“:这应该是另一种方式,不是吗? – ultranaut 2013-03-06 01:02:35

回答

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在当前条件匹配时停止。