如何删除WordPress目录斜杠

时间:2021-02-20 作者:Duni Chand

我在我的域目录中安装了一个网站,如example.com/website.

主要的问题是它将我重定向到example.com/website/.

我永远不想重定向,我只想我的子目录网站永远不重定向我。

我想这样做,这样用户就可以访问我的网站,而不必使用它的最后一个斜杠example.com/website.

我可以使用PHP函数来实现这一点吗?或者也可以共享.htaccess 如果可能,请进行编码。

我读过许多关于stack exchange相关尾部斜杠的文章,甚至用户提出的问题,但都没有任何益处。

我还尝试了各种.htaccess 代码,但没有好处。

请帮我做这个。

1 个回复
SO网友:MrWhite

主要的问题是它将我重定向到example.com/website/

默认情况下,Apache(mod\\u dir)将;“修复”;如果文件系统目录中省略了尾部斜杠,则带有301重定向的URL将附加该斜杠。这是其他Apache功能正常运行所必需的。。。

如果没有尾部斜杠DirectoryIndex 未送达文件,将导致403禁止响应(除非Options Indexes 在这种情况下,尽管存在索引文档,但仍将获得目录列表(这是一个潜在的安全漏洞,请参见下文)。

如果请求是/website (无尾随斜杠)然后在/website/.htaccess 文件将不会触发(因此WordPress前端控制器将失败)。

可以防止Apache(mod\\u dir)在/website 目录(使用DirectorySlash Off), 然而,我们必须采取额外的步骤来解决上述问题,并使用内部重写手动附加尾部斜杠(或直接重写到WP front controller)。我们也不能在/website/.htaccess 文件-必须将其移动到文档根目录(父目录)。

例如:

移动现有的WordPress/website/.htaccess 文件到父目录(文档根目录),即。/.htaccess.

然后,您需要对/.htaccess 文件和WordPress前端控制器:

# mod_autoindex must be disabled
# Otherwise your site will be vulnerable to "information disclosure"
Options -Indexes

# Prevent mod_dir appending the trailing slash to filesystem directories
DirectorySlash Off

# BEGIN WordPress
RewriteEngine On
RewriteBase /website

# Remove trailing slash from "/website/" if requested directly
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(website)/$ /$1 [R=301,L]

# Route requests for the directory itself (ie. the "homepage")
# (The DirectoryIndex is not otherwise triggered.)
RewriteRule ^website/?$ index.php [L]

# Front controller for all other URLs of the form "/website/<something>"
RewriteRule ^[^/]+/index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^website/. index.php [L]
# END WordPress
因为我们必须定制# BEGIN WordPress 第节,您必须防止WordPress覆盖此内容并创建另一个(默认).htaccess 中的文件/website/ 子目录。

上述内容还将规范化对/website/ (带尾随斜杠)并重定向到/website 以删除尾部斜杠。您应该首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。

您需要在测试之前清除浏览器缓存,因为早期的301重定向(由mod\\u dir/Apache)附加尾部斜杠将由浏览器缓存。

请注意DirectorySlash Off 指令适用于所有子目录。因此,如果应该可以访问任何其他子目录(我认为不太可能),那么您需要采取其他步骤。

我可以使用php函数来完成此操作吗

尾部斜杠的附加与PHP无关-它是一个Apache;功能;。但是,您确实需要确保WordPress仍然能够路由URL,因为请求的URL路径现在是/website, 而不是/website/ (从技术上讲,这是一个不同的URL)。

参考号:

Security Warning
关闭尾部斜杠重定向可能导致信息泄露。考虑这样一种情况,mod\\u autoindex是活动的(选项+索引),DirectoryIndex被设置为有效资源(比如index.html),并且没有为该URL定义其他特殊句柄。在这种情况下,带有尾部slash的请求将显示索引。html文件。但是,没有拖尾的slashwould请求将列出目录内容。

相关推荐

Redirecting from login

我希望我的站点在登录到site\\u url(“/”)后,为除“administrator”之外的所有用户重定向。我还希望admin\\u栏显示特定角色ie event\\u planner。除了当和event\\u planner登录并单击管理栏进入管理时,它会重定向到“/”之外,其他功能都正常工作。用于重定向的挂钩是“admin\\u init”,这显然是错误的。是否有另一个钩子可以用来在登录时重定向到/而不是在按下管理栏上的仪表板时重定向。谢谢