.htaccess重写文件夹到不同的index.php

时间:2014-03-01 17:20:24

标签: php wordpress .htaccess

我有一个laravel装置和wordpress并排生活。 在root中我有一个.htaccess如下:

<IfModule mod_rewrite.c>
  <IfModule mod_negotiation.c>
     Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...

RewriteCond %{REQUEST_URI} !^/cms
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

RewriteCond %{REQUEST_URI} ^/cms
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ cms.php [L]

</IfModule>

我需要通过index.php路由所有请求,除非它们以/ cms /为前缀 然后我需要它通过cms.php发送,这是Wordpress的旧index.php。

我认为上面的代码可以解决问题,但我似乎错了:)

不确定我哪里出错了

由于

1 个答案:

答案 0 :(得分:1)

  

这似乎是我的问题:)我在哪里导致这种情况发生?

这里发生了一些事情,但它涉及这条规则:

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

此规则将删除所有跟踪,通过在没有它的情况下重定向到相同的网址。 apache中还有一个名为mod_dir的模块,它会自动将目录的任何请求重定向到尾部斜杠 相同的URL >尾随斜线。

这意味着您有两个选择:

  1. 关闭mod_dir并允许访问目录而不使用尾部斜杠
  2. 不要重定向目录的尾部斜杠。
  3. 对于#1,您将遇到此安全警告:

      

    关闭尾部斜杠重定向可能会导致信息泄露。考虑一下mod_autoindex处于活动状态(Options + Indexes)并且DirectoryIndex设置为有效资源(例如index.html)的情况,并且没有为该URL定义其他特殊处理程序。在这种情况下,带有斜杠的请求将显示index.html文件。但是没有尾随斜杠的请求将列出目录内容。

    换句话说,如果你有自动索引,人们将能够看到你的目录中的文件列表,即使你有一个index.html文件(或你使用的任何目录索引) )。

    对于#2,您只需要添加一个条件:

    # Redirect Trailing Slashes...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]