具有多个参数的htaccess重写规则

时间:2013-05-16 11:13:38

标签: php .htaccess mod-rewrite

这是我的.htaccess文件:

Options +FollowSymLinks
Options -Multiviews

RewriteEngine On
RewriteBase /website/

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [S=20]

RewriteRule ^(.*)$ $1.php 
RewriteRule ^([a-z0-9_-]+)/([a-z0-9_-]+)(/)?$ index.php?occ=$1&cat=$2

现在这两行并不起作用,例如:

如果我去contact.php,我会输入我的网址:localhost / website / contact 它会起作用

但是,如果我想通过在我的网址:localhost / website / occasion / category中输入这个来访问location / website / index.php?occ = occasion& cat = category,它只会在我删除第一个重写规则时起作用

但我不能再去localhost / website / contact

我在这里想念的是什么?

2 个答案:

答案 0 :(得分:5)

您的问题是您的订单。

/website/occasion/category首先被重写为/website/occasion/category.php,然后无法匹配第二条规则。

RewriteRule ^([a-z0-9_-]+)/([a-z0-9_-]+)(/)?$ index.php?occ=$1&cat=$2 [L]
RewriteRule ^(.*)$ $1.php

更改顺序并将[L]参数添加到规则(成功执行后停止执行后续规则)应该可以解决问题。

答案 1 :(得分:0)

RewriteEngine on

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

RewriteRule ^site_1/(.*)$ site_1/index.php?/$1 [L]
RewriteRule ^site_2/(.*)$ site_2/index.php?/$1 [L]

在网站中,您不会拥有1000个网站,您可以声明您的愿望链接和文件夹名称 例如 如果您的结构是

/home/site1, /home/site2

和链接就像http://yourdomain.com/medical& http://yourdomain.com/entertainment