htaccess重写不适用于主目录中的多个文件

时间:2016-05-21 16:20:20

标签: apache .htaccess redirect mod-rewrite

标题并未完全描述该问题,但我已重写规则设置,以转到主目录中存在的三个不同文件:api.php,admin.php和index.php

这是我的.htaccess

RewriteEngine on
RewriteCond $1 ^(api)
RewriteRule ^(.*)$ /api.php/$1 [L]

RewriteCond $1 ^(admin)
RewriteRule ^(.*)$ /admin.php/$1 [L]

RewriteCond $1 !^(index\.php|admin\.php|api\.php|admin|api|_|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

对于/ admin和/ api我收到500内部服务器错误。我不确定为什么会发生这种情况,但如果我将这些php文件放在像/ _这样的文件夹中并编辑.htaccess以匹配它,那么它会重写而不会出错。我可以限制主目录文件重定向的数量吗?或者我错过了什么?

我的主要目标是:

将所有/ api请求重定向到/api.php/whatever/is/after/here

将所有/管理员请求重定向到/admin.php/whatever/is/after/here

将除例外的所有其他请求重定向到/index.php/whatever/is/here

2 个答案:

答案 0 :(得分:1)

尝试:

-o PasswordAuthentication=no -o User=root

答案 1 :(得分:0)

我发现我必须在我的正则表达式匹配中更具体。以前我匹配任何以“admin”或“api”开头的东西(例如,管理员在新学校),这实际上我并不知道,并且将来会引起问题。我改变了我的正则表达式,现在它只匹配,如果它是一行,一个英镑符号,斜线或问号。 (基于测试)

以下是我的最终代码:

RewriteEngine on
RewriteRule ^(api(?=$|[/?#]).*)$ /api.php/$1 [L]
RewriteRule ^(admin(?=$|[/?#]).*)$ /admin.php/$1 [L]

RewriteCond $1 !^(index\.php|admin\.php|api\.php|_|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

我很欣赏Croises的答案,这确实有助于让我了解他的解决方案可能会出现什么问题。然而,这正是我所寻找的,因为我不想仅仅因为它们存在而打开对文件和目录的访问。