.htaccess 阻止网站运行,而 WP 网站可以运行,为什么?

.htaccess 阻止网站运行,而 WP 网站可以运行,为什么?

我有三个网站在共享主机(Bluehost)上运行,并拥有一个专用 IP 地址。描述如下:

  • example.com=> 这是主站点和域名,是 WP
  • example.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。为什么我在这一点上做错了?

答案1

重要的是底层文件/目录结构。如果这 3 个站点本质上位于同一个帐户(同一个父目录)中,那么每个站点可能位于单独的子目录中(这通常是共享环境中插件和子域的默认设置),并且您应该.htaccess在每个子目录中都有一个单独的文件。而不是全部都使用一个。

更新#1:尝试向 WordPress 添加例外.htaccess,以明确排除通过子域访问的任何重写。例如:

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]

    RewriteCond %{HTTP_HOST} !^subsite\.example\.net$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>  
# END WordPress

然而,这实际上没有必要,因为(如评论中所述),独立应用程序.htaccess文件中的 mod_rewrite 指令应该完全覆盖这些指令(因为独立应用程序位于子目录中)。

向块中添加代码的另一个警告WordPress是,这可能会在下次更新时被覆盖。

更新#2:或者,尝试将RewriteOptions指令添加到独立应用程序的.htaccess文件(位于子目录中):

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteOptions IgnoreInherit
    :

如果此方法有效,则似乎表明RewriteOptions InheritDown[Before]服务器配置中存在一条指令,允许继承父目录中的 mod_rewrite 指令。请注意IgnoreInheritInheritDown[Before]是 Apache 2.4+ 功能。

(编辑:看来 OP 是在 Apache 2.2.31 上,所以上述指令导致 500 内部服务器错误。)

更新#3:您还可以尝试RewriteBase /从两个.htaccess文件中删除该指令,并删除 WordPress 中的斜线前缀RewriteRule 代换匹配独立应用程序文件中的规则.htaccess。因此,WordPress.htaccess文件变为:

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]
</IfModule>  
# END WordPress

最后一行原来是:(RewriteRule . /index.php [L]即带有斜线前缀)。斜线表示相对于根目录的 URL 路径,没有斜线则表示相对于包含该.htaccess文件的目录的 URL 路径。

答案2

为你的独立 PHP 应用程序创建.htaccess文件,将你的代码重定向到子站点.example.net

相关内容