在做了一些研究后,我仍然不确定为什么这个重写规则不能在我的服务器上工作,我已经检查了多个主机,但无济于事,问题出在这里: -
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
上面的最后一行没有为index.php上的GET提供任何内容,这意味着$ _GET为空。有什么建议吗?
PS:试图实现这一点 - > https://github.com/panique/php-mvc/blob/master/.htaccess
答案 0 :(得分:1)
你的规则看起来没问题。尝试一些调整:
Options -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)/?$ index.php?url=$1 [L,NE]
答案 1 :(得分:0)
试试这个:
Options +FollowSymlinks
RewriteEngine on
# check existing maps or files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* - [L]
# re-writing
RewriteRule (.*)$ index.php?url=$1
要获取URL,您可以在PHP中使用类似的内容:
$linkArray = explode("/",$_GET['url']);
您可以访问GET参数。如果您使用 www.mywebsite.com/home/&message=hello ,则会将其重写为 www.mywebsite.com/?url=home/&message=hello 。因此,通过爆炸,您可以获取您的URL参数,例如使用$ _GET ['message'],您就可以获得该消息。