向mod_rewrite

时间:2016-12-27 19:57:52

标签: apache .htaccess redirect mod-rewrite

我的基本重定向与mod_rewrite模块一起使用。请求页面时,例如localhost/home它正确地重定向到localhost/index.php?page=home,但我遇到异常问题。

我创建了一个文件夹api,我按类别存储文件,例如api/auth/register.phpapi/customer/create.php。我试图制作包含2个参数的重写规则(在本例中为 auth customer ),所以基本上它只是从网址中删除.php

我制定的规则是

RewriteRule ^api/(.*)/(.*)/?$ api/$1/$2.php [L]

将该行添加到我的.htaccess后,问题就开始发生了。例如,我的.css.js文件开始重定向。那么也许我需要为api做一些例外?你有其他想法来改进我的重写规则吗?

的.htaccess

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/(.*)/(.*)/?$ api/$1/$2.php [L] # problems started to occur after adding this line
RewriteRule (.*) index.php?page=$1 [L,QSA]

提前致谢。

1 个答案:

答案 0 :(得分:1)

RewriteCond只会影响后面的第一个RewriteRule,因此您需要将它们放在初始规则旁边,并将添加的规则移到它们上面(具有自己的条件)。 此外,您的/api规则不够严格((.*)会选择任何内容,包括斜杠),这在您的情况下可能无关紧要,但仍然如此。我觉得你试试这个:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/([^/]*)/([^/]*)/?$ api/$1/$2.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?page=$1 [L,QSA]