.htaccess 没有尾随斜杠导致404,如何使用htaccess修复?

3lxsmp7m  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(112)

这些URL是:

  • (不工作)http://example.com/seller/samsung
  • (工程)http://example.com/seller/samsung/

我为这些类型的URL设置的.htaccess规则如下所示:
RewriteRule ^seller/[^/]+/(.*)$ ./$1
我可以做些什么来使这两个URL转到同一个页面?

bfnvny8b

bfnvny8b1#

你可以在URL的末尾强制出现一个斜杠。您可以在.htaccess中使用以下命令:

RewriteCond %{REQUEST_URI} !(/$|\.) 
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]

字符串
在测试之前,请确保清除缓存。
编辑:

RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]


上面的是做什么的?所以这个条件会抓取你的目录,比如/samsung,并会检查它的末尾是否有一个/。如果没有,它将抓取URL末尾的目录(再次是/samsung,并在其上添加/。它将使用301重定向来完成此操作,并将您留给/samsung/
关于L标志(摘自官方文档):
[L]标志使mod_rewrite停止处理规则集。在大多数上下文中,这意味着如果规则匹配,则不会处理进一步的规则。这与Perl中的最后一个命令或C中的break命令相对应。使用此标志指示应立即应用当前规则而不考虑其他规则。

wvyml7n5

wvyml7n52#

将此代码放入您网站根目录下的**.htaccess**文件中。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ %{REQUEST_URI}/ [L,R=301]

字符串
RewriteEngine打开:启用Apache mod_rewrite模块进行URL重写。
重写%{REQUEST_FILENAME}!-f:此条件检查请求的URL是否未Map到现有文件。
重写条件%{REQUEST_URI}!(.)/$:此条件检查请求的URL是否还没有结尾斜杠。
RewriteRule ^(.
[^/])$ %{REQUEST_URI}/ [L,R=301]:此规则捕获没有尾随斜杠的URL,并使用301(永久)重定向将它们重定向到带有尾随斜杠的同一URL。[L]标志停止进一步处理,并且[R=301]标志指示永久重定向。
此规则确保每当用户访问没有尾随斜杠的URL时,他们将被重定向到带有尾随斜杠的同一URL,从而消除404错误。
请记住,在将其部署到您的实时网站之前,请在开发/登台环境中进行测试,以确保其按预期工作。此外,确保在Apache服务器上启用了mod_rewrite模块,以便使其工作。

相关问题