Php mod.rewrite同一目录下的多个规则
我正在使用以下代码Php mod.rewrite同一目录下的多个规则,php,apache,mod-rewrite,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.ph
#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
变量eid
我还需要一个规则,将www.website.com/spec.php?eid=00000
转换为www.website.com/00000
或www.website.com/spec/00000
,而不实际将spec.php
移动到子目录中
任何帮助都将不胜感激,我的眼睛有谷歌烧伤。我发现有一些做了类似的事情,但当我试图将其与我的情况相匹配时,我遇到了问题。所以这一行在这里
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停止“将www.website.com/index.php?q=Keyword
转换为www.website.com/Keyword
”:应该是相反的,不是吗?