我已经尝试了一段时间来删除斜杠在网址链接结束,但它不工作。我搜索了很多例子,但没有一个解决我的问题。
我正在使用Silverstripe 4,目前运行在本地服务器上。出于SEO的原因,我必须删除斜线。
我目前的网址是:
www.example.com/
// Need to be like below
www.example.com
我尝试通过htaccess
stackoveflow question中的示例
我在/public/.htaccess中输入了
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R] # <- for test, for prod use [L,R=301]
当我访问主页的时候,斜杠在最后。
我尝试通过SiteTree中的代码****
public function Link($action = null)
{
return rtrim(parent::Link($action), '/');
}
以上代码删除所有页面结尾处的斜线,但主页上的斜线仍然存在。
www.example.com/about-us (here removed)
www.exaple.com/ (here exists)
并通过配置文件尝试
Director::config()->set('alternate_base_url', rtrim(Environment::getEnv('SS_BASE_URL'), '/'));
但同样斜杠存在于主页上的url的末尾。
有人有解决这个问题的办法吗?谢谢!
这是我完整的htaccess文件
<IfModule mod_rewrite.c>
# Turn off index.php handling requests to the homepage fixes issue in apache >=2.4
<IfModule mod_dir.c>
DirectoryIndex disabled
DirectorySlash On
</IfModule>
SetEnv HTTP_MOD_REWRITE On
RewriteEngine On
# Enable HTTP Basic authentication workaround for PHP running in CGI mode
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Deny access to potentially sensitive files and folders
RewriteRule ^vendor(/|$) - [F,L,NC]
RewriteRule ^\.env - [F,L,NC]
RewriteRule silverstripe-cache(/|$) - [F,L,NC]
RewriteRule composer\.(json|lock) - [F,L,NC]
RewriteRule (error|silverstripe|debug)\.log - [F,L,NC]
# Process through SilverStripe if no file with the requested name exists.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php
# REMOVE SLASH AT THE END OF THE URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R] # <- for test, for prod use [L,R=301]
</IfModule>
1条答案
按热度按时间1cosmwyk1#
您正在尝试删除URL路径的 start 处的斜杠,该斜杠紧跟在主机名之后。
URL路径的开头总是有一个斜杠,即使你在浏览器的地址栏中并不总是看到它。这是形成有效HTTP请求所必需的。
无论您请求
www.example.com
(无斜杠)还是www.example.com/
(有斜杠),用户代理/浏览器实际上向服务器发出完全相同的请求,即www.example.com/
。如果您查看HTTP请求头的第一行,您将看到两种情况下的内容如下:请注意第一个斜线-表示URL路径。此处的 nothing 无效。
这与删除URL路径末尾的斜杠不同,例如
www.example.com/about-us/
到www.example.com/about-us
。在这种情况下,尾部斜杠只是另一个字符。(尽管当URL路径Map到物理目录时自然会有复杂性,因为mod_dir(默认情况下)总是在这种情况下附加尾部斜杠。另请参阅my answer以了解Webmasters Stack上的以下问题的详细信息:
进一步参考:
我尝试通过htaccess
试图删除URL路径开头的斜线将导致重定向循环,因为用户代理每次都会 * 更正 * 请求。要使请求到达您的服务器,URL路径的开头(即主机名之后)必须有斜线。
主页,即文档根目录,是一个 * 目录 *,因此 * 条件 * 失败,不处理规则。
但是 pattern
^(.*)/$
只会成功匹配非空的URL路径,而/$1
自然会使用斜杠前缀进行重定向。要省略斜杠,您需要执行以下操作:但这是 * 无意义的 *,并将导致重定向循环,原因如上所述。