我为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]
答案 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
,我们就可以了。
当然,如果你添加一些额外的字符串(例如.html
或request/
),这些字符串不包含在index.php
中,而不是你没有进行第二轮,但这只是一个解决方法不是解决方案。
答案 1 :(得分:0)
试试这个
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} /([a-z\-A-Z]+)
RewriteRule (.*) index.php?req=%1 [L]