Apache重写规则,包含来自同一虚拟目录的多个文件?

时间:2012-09-24 00:09:50

标签: apache .htaccess

这个问题分为两部分:

  1. 我使用htaccess重写将“file.php”更改为“file”,因此http://www.example.com/file就像http://www.example.com/file.php
  2. 一样

    以下是我的.htaccess的一部分:

        RewriteCond %{REQUEST_FILENAME}.php -f
        RewriteRule (.+) /$1.php [L]
    
    1. 第二部分是目录问题:
    2. 以下是处理此问题的.htaccess的一部分:

          RewriteRule ^register website/register
      
          RewriteRule ^register/rules website/rules
      

      我想要完成的是:

      http://www.example.com/register使用重写规则来显示网站/注册 http://www.example.com/register/rules使用重写规则来显示网站/规则

      问题是URL框显示了example.com/register/rules,但页面继续显示example.com/register的内容。

      这里出了什么问题?是“.php”扩展是导致所有这一切的第一部分吗?或者我的htaccess完全错了?

1 个答案:

答案 0 :(得分:1)

  

什么都没发生。 URL框显示example.com/register/rules,但页面继续显示example.com/register

的内容

这种情况正在发生,因为你没有遵守规则,你有这个:

RewriteRule ^register website/register

RewriteRule ^register/rules website/rules

第二条规则永远不会被应用,因为URI /register/rules与第一条规则的正则表达式^register匹配,意思是“URI 启动register” )。添加结束边界:

RewriteRule ^register/?$ website/register [L]

RewriteRule ^register/rules/?$ website/rules [L]

或交换它们:

RewriteRule ^register/rules website/rules [L]

RewriteRule ^register website/register [L]

虽然你需要[L]标志。