这似乎是一个简单的.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更好的脚本方法,请告诉我。
答案 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