我的基本重定向与mod_rewrite
模块一起使用。请求页面时,例如localhost/home
它正确地重定向到localhost/index.php?page=home
,但我遇到异常问题。
我创建了一个文件夹api
,我按类别存储文件,例如api/auth/register.php
和api/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]
提前致谢。
答案 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]