Php .htaccess重写规则问题

Php .htaccess重写规则问题,php,apache,.htaccess,Php,Apache,.htaccess,这似乎是一个简单的.htaccess重写规则,但我仍然有问题 基本上,我希望域后面的任何文本都被解释为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

这似乎是一个简单的.htaccess重写规则,但我仍然有问题

基本上,我希望域后面的任何文本都被解释为
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

但是,它没有像应该的那样将$\u GET变量传递给PHP页面

谢谢你的帮助


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

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

RewriteRule ^[A-Za-z]+$ index.php?$1 [QSA]
QSA(查询字符串添加)将查询字符串添加到重写结果中。因此,任何$\u GET都将附加到传递到php脚本的内容上

您可能也会考虑添加L标志,尤其是如果这就是您试图重写的全部内容。它告诉处理器,如果此规则处理它,则重写结束

所以看起来像

RewriteRule ^[A-Za-z]+$ index.php?$1 [QSA,L]
我也经常添加NC,这使得它不区分大小写,所以您不必像在正则表达式中那样处理大小写

另一件需要记住的事情是,您没有将$1作为一个适当的get var传递。最好命名它即将出现的var。我刚刚注意到,您并没有首先创建$1风险值。试试这个

RewriteRule ^([A-Za-z]+)$ index.php?urlRequest=$1 [QSA,L]
然后在index.php中检查它

echo $_GET['urlRequest'];

希望有帮助

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

RewriteRule ^([A-Za-z]+)$ index.php?$1
其次,如果您想忽略文件名(任何带有“.”的文件)。使用:

这表示如果域后面的路径不包含“.”,请将其重写为index.php?foo

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

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

我试过你给的密码,但似乎不起作用。。。(我用
if(isset($\u GET['register']){echo“GET request”;}
@Chromium测试了它,你的url字符串是什么样子的?我想加上,#RewriteCond%{request\u FILENAME}!-f#RewriteCond%{request\u FILENAME}!-dMight还想添加一个RewriteCond,以避免重写图像目录的URL。谢谢!我刚刚添加了您在回答中修改的代码,现在它可以工作了。
RewriteCond %{REQUEST_URI} "^([^\.(php|jpeg|html|css|ico)]*)$"
RewriteRule ^([.]+)$ index.php?$1