mod_rewrite规则在没有文件扩展名的情况下无效

时间:2017-10-07 22:29:36

标签: apache .htaccess mod-rewrite

我为mod_rewrite做了一个非常基本的规则,但是无法使它工作。 我想要网址:" https://www.example.com/index.php?req=login" be" https://www.example.com/login"

htaccess文件是这样的:

RewriteEngine On
RewriteRule ^([^/]*)$ /index.php?req=$1 [L]

我被重定向到index.php但是如果我打印$ _GET结果是这样的:

Array ( [req] => index.php )

什么时候应该"登录"而不是" index.php"

如果我将所需规则的扩展名设为.html并将规则设为:

RewriteRule ^([^/]*)\.html$ /index.php?req=$1 [L]

它工作正常,我得到了#34; req"键入"登录"值得。

无法弄清楚如何使其无法扩展。

更新: 在模式的开头添加一些字符串也可以正常工作:

RewriteRule ^request/([^/]*)$ index.php?req=$1 [L]

2 个答案:

答案 0 :(得分:1)

重点是你必须从重写中排除index.php。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/?index\.php$
RewriteRule ^([^/]*)$ index.php?req=$1 [L]

在每次重写之后,洞穴事情将再次完成。所以首先重写如下:
 /login/index.php?req=login但现在服务器正在检查是否必须为新网址执行其他规则。如果您排除index.php,我们就可以了。

当然,如果你添加一些额外的字符串(例如.htmlrequest/),这些字符串不包含在index.php中,而不是你没有进行第二轮,但这只是一个解决方法不是解决方案。

答案 1 :(得分:0)

试试这个

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} /([a-z\-A-Z]+)
RewriteRule (.*) index.php?req=%1 [L]