如果目录存在,RewriteRule会添加额外的url参数

时间:2013-11-02 14:14:55

标签: regex apache .htaccess mod-rewrite

我的.htacess中设置了几个重写版本。它目前设置为将所有文件指向/ core/index.php,这很好。

我使用svn:external检查项目中的核心文件和功能。现在当我有一个与我的功能同名的目录时出现问题,例如我将“property”检出到名为“property”的文件夹中。我添加了一条规则,以便在文件存在时忽略它并使用与上面相同的行为,但是当我尝试时 / property 它将网址更改为 / property /?url = property 但当我做 / property / 时,它仍然是我所追求的。

我几乎就在那里,但是当url没有/ after属性(或者什么文件存在)时,只是无法弄清楚如何不显示/?url = property( / property / < / i>的)。

这是我的.htaccess - 请耐心等待我的重写对我来说是新的理由,这甚至可能都不正确。基本上下面我有2个规则,第一个用于所有不存在的文件,然后第二个用于存在的文件 - 但我想忽略并使用与第一个规则相同的行为。

   #re-write for file that don't exist
    <IfModule mod_rewrite.c>
      RewriteEngine On

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

      RewriteRule ^(.*)$ /core/index.php?url=$1 [L]
    </IfModule>

    #re-write for file that do exist
    <IfModule mod_rewrite.c>
      RewriteEngine On

      RewriteCond %{REQUEST_FILENAME} -d
      RewriteRule ^(.*)$ /core/index.php?url=$1 [L]

    </IfModule>        

1 个答案:

答案 0 :(得分:0)

尝试在.htaccess :

上添加此行
 DirectorySlash On

 ## Adding a trailing slash
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_URI} !/$
 RewriteRule . %{REQUEST_URI}/ [L,R=301]

如果请求是针对目录的话,这将始终添加斜杠,您将能够避免此问题。