添加尾随斜杠.htaccess

时间:2012-08-06 13:54:53

标签: .htaccess mod-rewrite redirect slash trailing-slash

我正在尝试获得以下效果(使用此本地文件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 个答案:

答案 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。