18

我正在尝试获得以下效果(使用此本地文件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 并丢弃路径。有人可以解决这个问题吗?

4

4 回答 4

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

此代码需要放在 RewriteEngine On 下面的 .htaccess 文件顶部

于 2012-08-09T09:57:57.393 回答
2

请在 .htaccess 文件的顶部添加以下行

RewriteEngine on
#Add Trailing slash for end of the URL
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R]
于 2019-06-07T06:10:37.180 回答
1

请在.htaccess,

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [L,R=301]
于 2020-02-13T16:52:18.167 回答
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。

于 2021-06-11T15:11:46.387 回答