htaccess重写规则麻烦[L]

时间:2017-01-16 14:26:59

标签: php apache .htaccess mod-rewrite url-rewriting

任何人都可以通过.htaccess来帮助我吗?

我的网站上有一个文件夹系统:

  • 用户

    • 的index.php
    • profile.php
    • 的login.php
    • 其他pages.php
    • contact.php

    • products.php

  • 的index.php

当有人来到我的网站example.com时,会显示index.php页面。我使用.htaccess来获得干净的网址。

example.com/contact必须包含/page/contact.php到index.php。

example.com/user/username/profile必须包含/user/profile.php到user / index.php。

example.com/products/spinningbike将product.php包含在index.php中,并显示产品spinbike的详细信息。

这是我的.htaccess文件:

RewriteEngine On

RewriteRule ^login /user/login.php [L]
RewriteRule ^user/(\w+)/?$ /user/index.php?id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?page=$1

我总是在我的日志文件中收到这些php错误:

  

PHP警告:include():无法打开'page / user.php'以包含   (include_path ='。:/ usr / local / lib / php')in   第115行的/home/example.com/public_html/index.php,referer:   http://www.example.com/user/wim/profile PHP警告:   include(page / user.php):无法打开流:没有这样的文件或   第115行/home/example.com/public_html/index.php中的目录,   referer:http://www.example.com/user/wim/profile

我认为[L]无效。

2 个答案:

答案 0 :(得分:0)

如此定义的htaccess,网址example.com/user/username/profile将与最后一条规则匹配。因为第二条规则只匹配此格式的网址:example.com/user/[any word character]

word charactersa-zA-Z0-9_

您必须更改第二条规则以匹配此网址

RewriteRule ^user/(\w+)/(\w+)/?$ /user/index.php?id=$1&page=$2 [L]

这样,网址example.com/user/username/profile将被重写example.com/user/index.php?id=username&page=profile

答案 1 :(得分:-1)

首先,您当前的“文件夹系统”中不存在page/user.php

然后,即使它存在,如果您使用XAMPP,WAMP或MAMP之类的东西也可能无法工作,因为这些软件使用的默认根目录可能不是您的。

例如,在XAMPP中,此目录为C:\xampp\htdocs,因此,如果您的项目位于此默认目录中的文件(例如myProject)中,则查看项目呈现的URL将为{{ 1}}。 考虑到这一点,如果您重定向到127.0.0.1/myProject,重定向网址将为/page/user.php但是您要点击127.0.0.1/page/user.php(C:\ xampp \ htdocs \ page \ user.php不存在,所以生成异常)

在XAMPP中,要更改Apache Web服务器的默认根目录,必须编辑以下行:

127.0.0.1/myProject/page/user.php

DocumentRoot "C:/xampp/htdocs" <Directory "C:/xampp/htdocs">

DocumentRoot "C:/xampp/htdocs/myProject" <Directory "C:/xampp/htdocs/myProject">

中的