【发布时间】:2014-03-04 00:20:06
【问题描述】:
编辑:这个问题主要是通过下面的答案解决的,但它也提出了一个新问题。如果我从 .htaccess 文件中删除“RewriteCond %{REQUEST_FILENAME} !=F”,如果我向 stock.com/register 发出请求,我将再次被重定向到 stock.com/index.php?page=index.php。我可以接受它需要在那里,但我试图理解为什么删除这行代码会导致这种行为。我知道它在那里允许访问者访问实际文件,例如图像,但我不明白它与 URL 的重定向/重新路由(例如 stock.com/register)有什么关系。如果有人能解释一下,我将不胜感激。
试图为我在 Wampserver 上本地开发的简单 MVC 站点获取漂亮的 URL,仅用于学习目的。我有以下 .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。如果我从正则表达式中取出点,这一切都很好,但是我无法在页面/文件名中包含点。没有必要,但我这样做是为了学习目的,所以我想知道这里的解决方案是什么。我已经尝试过转义点和不转义。谢谢!
【问题讨论】:
-
.(点)表示除换行符以外的任何字符。您可能是指文字\.。 -
感谢您的回答。我已经尝试了两种方法并得到了相同的结果。根据我的阅读,点不是字符类中的元字符,因此不需要转义。有错吗?
-
不,这是正确的。我的错。 :)
标签: php regex .htaccess pretty-urls