如何将以特定文件夹名称开头的所有请求转发到同一文件夹

时间:2020-07-11 作者:Yazan W Yusuf

在我的Wordpress网站主目录中,我创建了一个文件夹servers, 其中包含两个文件.htaccess &;index.php.

.htaccess 文件中,我添加这些行以将指向该文件夹的所有请求重定向到index.php 文件

# Enable rewriting.
RewriteEngine on

# Optional: do not allow perusal of directories.
Options -Indexes

# Optional: explicitly enable per-directory rewrites in the .htaccess context.
Options +FollowSymLinks

# Required when not in the webroot. Always use a trailing slash.
RewriteBase /

# To be able to access existing directories and files (standalone scripts).
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# Redirect everything else to index.php.
# Add QSA to ensure that querystring variables are registered as such.
RewriteRule . index.php [L,QSA]

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php72” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-ea-php72 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
所以每当用户请求链接时example.com, example.com/fooexample.com/foo/bar, 应加载默认Wordpress网站。当我请求任何以servers 文件夹:example.com/servers, example.com/servers/foo, example.com/servers/foo/bar, 我想要example/com/servers/index.php 要执行的文件。

当前example.com/servers/.htaccess 文件仅执行此urlexample.com/servers 使用example.com/servers/index.php 但它不会执行以servers 文件夹(example.com/servers/foo, example.com/servers/foo/bar) 由example.com/servers/index.php 文件

如何编辑htaccess文件,以便所有请求example.com/servers/* 由执行example.com/servers/index.php 文件

2 个回复
最合适的回答,由SO网友:mozboz 整理而成

要实现这一点,您不需要。服务器目录本身中的htaccess。您可以删除它,apache可以使用根Wordpress中的规则。htaccess可以完成所需的重写,并且可以有效地将站点的重写规则保留在一个地方。

您需要一些规则来实现这一点:

RewriteRule ^servers/index.php - [L]
RewriteRule ^servers/(.*) servers/index.php?page=$1 [L]
他们说:

如果我们已经请求一个以服务器/索引开头的页面。php然后退出进程重写规则。这可以停止重定向循环错误,任何以服务器/开头的页面都可以重定向到服务器/索引。php,将最初位于servers/之后的所有内容传递给索引中的一个参数。php,如果需要的话。E、 g.这会将服务器/foo/bar发送到服务器/索引。php?page=foo/bar编辑:您需要将这些规则放在任何其他RewriteRules或RewriteCond语句之前,以便首先处理它们。

SO网友:MrWhite

# Required when not in the webroot. Always use a trailing slash.
RewriteBase /
您的RewriteBase / 指令导致所有请求(除了/server/ 自身被重写回文档根目录。ie。/index.php, 不/server/index.php 如预期的那样。

旁白:我想补充一句,这条评论根本不是真的。这取决于你在做什么。事实上,通常情况下RewriteBase 应该完全省略指令(这里就是这种情况)。

*1请求/server/ "E;“工作”;因为正则表达式.RewriteRule 指令失败,然后请求留给mod\\u dir发出内部子请求index.php - 这个DirectoryIndex - 在当前目录中。)

您需要:

移除此RewriteBase 指令-因为您正在重写index.php (相对路径)在当前目录中(默认行为)。

或,显式设置RewriteBase /server. (但这大部分是多余的。)

相关推荐

如果is_page()不能与wp_reDirect一起使用

我安装了一个插件,它正在前端创建用户配置文件。此页面的ID在wordpress后端为301。如果访问了配置文件站点,我想在url后面附加一个参数。参数值存储在cookie中。用于附加URL的代码正在运行,但当我添加代码以仅在此页面id上显示时,它不起作用。代码在my child themes函数中执行。phpNOT WORKINGif( is_page(301)) { echo \'page\'; // Event ID in der URL als $_GET hinz