我有一个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。
我认为上面的代码可以解决问题,但我似乎错了:)
不确定我哪里出错了
由于
答案 0 :(得分:1)
这似乎是我的问题:)我在哪里导致这种情况发生?
这里发生了一些事情,但它涉及这条规则:
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
此规则将删除所有跟踪,通过在没有它的情况下重定向到相同的网址。 apache中还有一个名为mod_dir的模块,它会自动将目录的任何请求重定向到尾部斜杠 与相同的URL >尾随斜线。
这意味着您有两个选择:
对于#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]