.htaccess RewriteRule问题

时间:2011-02-22 20:38:34

标签: php apache .htaccess

这似乎是一个简单的.htaccess RewriteRule,但我仍然遇到问题。

基本上,我希望将域后的任何文本解释为index.php?$text,除非文本是文件名。

示例:

http://domain.com/register - > http://domain.com/index.php?register

http://domain.com/images/image.jpeg - > http://domain.com/images/image.jpeg

这是我到目前为止所做的:

RewriteRule ^[A-Za-z]+$ index.php?$1

但是,它没有将$ _GET变量传递给PHP页面。

感谢您的帮助。

编辑我正在使用PHP-所以如果有比.htaccess更好的脚本方法,请告诉我。

2 个答案:

答案 0 :(得分:1)

将QSA标志添加到重写规则中,使其看起来像

RewriteRule ^[A-Za-z]+$ index.php?$1 [QSA]

QSA(查询字符串添加)将查询字符串添加到重写结果中。所以任何$ _GET都会被附加到传递给你的php脚本的内容上。

您可能会考虑添加L标志,尤其是如果您尝试使用重写。它告诉处理器该规则是否处理重写的结束。

所以它看起来像

RewriteRule ^[A-Za-z]+$ index.php?$1 [QSA,L]

我经常添加NC,这使得它不区分大小写,因此您不必像正在使用正则表达式那样处理大写和小写。

要记住的另一件事是你没有将$ 1作为正确的get var传递。将var命名为它会更好。我刚刚注意到你首先没有创建$ 1 var。试试这个。

RewriteRule ^([A-Za-z]+)$ index.php?urlRequest=$1 [QSA,L]

然后在index.php

中查看
echo $_GET['urlRequest'];

希望有所帮助!

答案 1 :(得分:1)

首先,你从不分组(存储)文本,所以$ 1是“”。你应该使用:

RewriteRule ^([A-Za-z]+)$ index.php?$1

其次,如果你想忽略文件名(任何带有'。'的东西)。使用:

RewriteCond %{REQUEST_URI} "^([^\.]*)$"
RewriteRule ^([.]+)$ index.php?$1

如果域后的路径不包含'。',则说明。将其重写为index.php?foo

如果您想限制文件扩展名,请使用:

RewriteCond %{REQUEST_URI} "^([^\.(php|jpeg|html|css|ico)]*)$"
RewriteRule ^([.]+)$ index.php?$1