漂亮的URL - 点导致错误

时间:2014-02-06 20:27:58

标签: php regex .htaccess pretty-urls

编辑:这个问题主要通过以下答案解决,但它也提出了一个新问题。如果我从.htaccess文件中删除“RewriteCond%{REQUEST_FILENAME}!= F”,如果我向stock.com/register发出请求,我会再次被重定向到stock.com/index.php?page=index.php。我可以接受它需要在那里,但我试图理解为什么删除这行代码会导致这种行为。我知道它允许访问者访问图像等实际文件,但我不知道它是如何与URL的重定向/重新路由相关,例如stock.com/register。如果有人能解释我会非常感激。

尝试为一个简单的MVC网站提供漂亮的URL,我正在Wampserver本地开发,仅用于学习目的。我有以下.htaccess代码设置,以便任何URL请求被路由回index.php控制器,该控制器根据'page'的$ _GET值提供不同的内容。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !=D
RewriteCond %{REQUEST_FILENAME} !=F
RewriteRule ^([-\w.]+)$ index.php\?page=$1 [R=302,L]

我将它设置为R = 302,这样我就可以看到它重定向到哪里了。我设置的主机名是stock.com。如果我去stock.com,这很好。但如果我尝试访问stock.com/register,我会被重定向到stock.com/index.php?page=index.php。如果我从正则表达式中取出点,这一切都可以正常工作,但是我不能在页面/文件名中包含点。没有必要,但我这样做是为了学习目的,所以我想知道解决方案是什么。我试过逃避点而不是。谢谢!

1 个答案:

答案 0 :(得分:1)

一些语法问题。试试这段代码:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([-\w.]+)$ index.php?page=$1 [R=302,L,QSA]