我们对 Wordpress 的 .htaccess 文件进行了一些修改,另一个应用程序在同一目录中运行(见下文)。如您所见,我们插入了一些 RewriteCond 来告诉 WP 重写忽略对我们其他应用程序控制器的特定请求。
我们刚刚添加了一条规则(在下面进行了评论),它在两个本地开发环境(一个 MAMP 另一个 XAMP)上完全符合预期。但是当我们将它推送到我们的生产服务器时,新规则似乎没有任何效果。我们无法导航到新目录 (/app/resumes/stamped/123.pdf) 中的文件,而是看到 Wordpress “这很尴尬” 消息,表明请求仍在通过 Wordpress 路由。
mod_rewrite 绝对有效,并且AllowOverride All
已投入生产。我们还可以检查什么以使其在生产中工作?
对我来说,最奇怪的部分是 OTHER RewriteCond
DO 工作,所以我真的很困惑为什么只有这一新行在生产环境中表现得如此不同。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
###This is the new rule
RewriteCond %{REQUEST_URI} !/app/resumes/stamped/
RewriteCond %{REQUEST_URI} !^/admin
RewriteCond %{REQUEST_URI} !^/pages
RewriteCond %{REQUEST_URI} !^/tests
RewriteCond %{REQUEST_URI} !^/users
RewriteCond %{REQUEST_URI} !^/css/
RewriteCond %{REQUEST_URI} !^/js/
RewriteCond %{REQUEST_URI} !^/img/
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
更新
这就是 /app 中的 .htaccess 中的内容
RewriteEngine on
RewriteBase /app/
#This is new too
RewriteCond %{REQUEST_URI} ^/resumes/stamped/
RewriteRule (.*) webroot/$1 [L]
更新 2 我们刚刚了解到 /stamped 目录的 .htaccess 文件所需的使用用户名/密码授权发送的请求(我使用 Chrome 的 REST 扩展手动添加必要的标头)确实成功。换句话说,它基本上可以工作,但我们无法判断,因为我们希望它提示输入用户名/密码,因为它在所有其他服务器上都这样做。所以真正的问题是,为什么授权提示(或缺少授权提示)会让我们进入该服务器上 Wordpress 的 404 页面?
更新 3
这是 .../stamped 中的 htaccess 文件
AuthType Basic
AuthName "restricted area"
AuthUserFile /home/username/public_html/.htpasswd
require valid-user
当然,.htpasswd 文件的路径从开发到生产是不同的。