我的服务器或登台服务器上有一个奇怪的行为,我们需要看看实际问题出在哪里。以下是流行的 Wordpress CMS 中的一些众所周知的代码:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
AddHandler application/x-httpd-php53 .php
与原始代码的唯一区别是在文件末尾添加了“AddHandler”,这是我们的暂存托管服务提供商所必需的。
真正的问题是我可以在我的开发服务器(基于内部 Ubuntu 的 12.04 标准服务器)上的以下虚拟 url 访问文件,而不是在生产或暂存(它们都是同一台服务器)中访问文件。
- /wp-content/test.php
- /wp-content/themes/test.php
- /wp-content/themes/wpactivis/test.php
- /wp-content/themes/wpactivis/_/test.php
- /wp-content/themes/wpactivis/_/ajax/test.php
现在在一组服务器上,这些 url 返回 404,Wordpress 似乎在我们的开发服务器上自动启动,200 OK 并且文件内容返回,这是经典的“Hello world”测试......
任何 htaccess 大师都可以告诉我粘贴的代码的真实行为应该是什么,它应该像登台服务器还是开发服务器。
我倾向于认为它应该像开发服务器一样,应该授予任何文件访问或目录访问权限,并且不返回 404,因为:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
条件!
谢谢
注意:不要告诉我这是编写 wordpress 或类似我不想听到的东西的坏方法。我们有一个完全安全的设置,文件可以直接访问我的插件或主题目录这一事实是无关紧要的。网络上发布了大量类似的问题,但没有答案,只有人们说你应该这样做。我在这里尝试的是回答为什么它在一台服务器上而不是另一台服务器上这样做。