我正在尝试获得以下效果(使用此本地文件http://localhost/[company_name]/[project_name]/.htaccess
):
http://localhost/[company_name]/[project_name]/page-1 (adds slash)
http://localhost/[company_name]/[project_name]/page-1/ (does nothing)
http://localhost/[company_name]/[project_name]/page-1/subpage-1 (adds slash)
http://www.example.com/page-1 (adds slash)<br />
http://www.example.com/page-1/ (does nothing)
etc.
我想要完成的是这个.htaccess不再需要路径http://localhost/[company_name]/[project_name]/
,这样我每次上传时都不需要编辑它。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
我在这里找到了上面的代码:Add Trailing Slash to URLs,但它只能动态使用HOST并丢弃路径。有人有解决方案来实现这种效果吗?
答案 0 :(得分:41)
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
答案 1 :(得分:0)
请在.htaccess文件顶部添加以下行
RewriteEngine on
#Add Trailing slash for end of the URL
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R]
答案 2 :(得分:0)
请在.htaccess,
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [L,R=301]
答案 3 :(得分:0)
所有其他答案的问题:POST 请求在重定向时会丢失数据。 您可以使用 http 307 指示浏览器重新发送 POST 数据:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R=307]
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307
顺便说一句,我更喜欢 REQUEST_FILENAME 条件。这可确保请求真正针对文件夹结构,而不是将斜杠附加到文件 Urls。