Apache mod_重写规则在没有文件扩展名的情况下不起作用

Apache mod_重写规则在没有文件扩展名的情况下不起作用,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我正在做一个修改的基本规则,但无法使它工作。 我想要的网址:是 htaccess文件如下所示: RewriteEngine On RewriteRule ^([^/]*)$ /index.php?req=$1 [L] 我被重定向到index.php,但如果我打印$\u,结果如下: Array ( [req] => index.php ) 什么时候应该登录而不是index.php 如果我将所需规则的扩展名设置为.html,并将规则设置为: RewriteRule ^([^/]*)\.ht

我正在做一个修改的基本规则,但无法使它工作。 我想要的网址:是

htaccess文件如下所示:

RewriteEngine On
RewriteRule ^([^/]*)$ /index.php?req=$1 [L]
我被重定向到index.php,但如果我打印$\u,结果如下:

Array ( [req] => index.php )
什么时候应该登录而不是index.php

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

RewriteRule ^([^/]*)\.html$ /index.php?req=$1 [L]
它工作得很好,我得到了带有所需登录值的req密钥

我不知道如何使它在没有扩展的情况下工作

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

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

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

关键是您必须从重写中排除index.php

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/?index\.php$
RewriteRule ^([^/]*)$ index.php?req=$1 [L]
每次重写后,将再次执行孔操作。因此,第一次重写如下所示: /login to/index.php?req=login,但现在服务器正在检查是否必须为新URL执行另一个规则。如果排除index.php,我们就可以了


当然,如果您添加了index.php中未包含的一些额外字符串,例如.html或request/,则不会进入第二轮,但这只是一种解决方法,而不是解决方案。

这也会生成mach/page/subpage,并将其重写为index.php?req=page,我不确定这是否是有意的,但/page1将不起作用好的答案+1。