我有三个站点在具有专用 IP 地址的共享主机 (Bluehost) 中运行。说明如下:
example.com
=> 这是主站点和域,是一个 WPexample.net
=> 这是一个附加域(不知道你是否熟悉这个术语)并且正在运行另一个 WP 站点subsite.example.net
=> 这是一个独立的 PHP 应用程序
每个 WP 都有自己的.htacess
文件,如下所示:
# 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
有了这个.htaccess
文件,两个 WP 站点都可以正常工作,但独立应用程序不能。如果我删除.htaccess
文件,则相反,独立应用程序可以工作,但 WP 网站不能。
任何人都可以帮助我找到解决此问题的方法吗?
更新
我正在.htaccess
为独立 PHP 应用程序的文件使用以下配置:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
# Add Caching.
<FilesMatch ".(ico|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=10800"
</FilesMatch>
# Prevent viewing of htaccess file.
<Files .htaccess>
order allow,deny
deny from all
</Files>
# Prevent directory listings
Options All -Indexes
# Compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
但不工作,因为我一点击任何链接就被踢出应用程序。
独立站点位于/public_html/plataforma
WP 位于/public_html
. 为什么我在这一点上做错了?
为您的独立 PHP 应用程序创建
.htaccess
文件,将您的代码重定向到subsite.example.net重要的是底层文件/目录结构。如果这 3 个站点基本上在同一个帐户上 - 同一个父目录 - 那么每个站点可能位于一个单独的子目录中(这通常是插件和子域在共享环境中默认的方式)并且您应该
.htaccess
在每个子目录中有一个单独的文件。不是所有人。更新#1:尝试向 WordPress 添加一个例外,
.htaccess
以明确排除通过子域访问的任何重写。例如:但是,这确实不是必需的,因为(如评论中所述),独立应用程序
.htaccess
文件中的 mod_rewrite 指令应该完全覆盖这些指令(因为独立应用程序位于子目录中)。向
WordPress
块添加代码的另一个警告是,这可能会被下一次更新覆盖。更新#2:或者,尝试将
RewriteOptions
指令添加到独立应用程序的.htaccess
文件(位于子目录中):如果这可行,那么似乎表明
RewriteOptions InheritDown[Before]
服务器配置中有一个指令允许继承父目录中的 mod_rewrite 指令。注意IgnoreInherit
和InheritDown[Before]
是 Apache 2.4+ 的特性。(编辑:似乎 OP 在 Apache 2.2.31 上,因此上述指令会导致 500 Internal Server 错误。)
更新#3:您还可以尝试
RewriteBase /
从两个文件中删除指令.htaccess
并删除 WordPressRewriteRule
替换中的斜杠前缀以匹配独立应用程序.htaccess
文件中的规则。因此,WordPress.htaccess
文件变为:之前读过的最后一行:(
RewriteRule . /index.php [L]
即带有斜杠前缀)。斜杠表示相对于根的 URL 路径,没有斜杠它现在是相对于包含.htaccess
文件的目录的。