在Apache上没有尾随斜杠的虚浮URL

以下代码将我们网站上的/ profiles /目录中的所有url从example.com/profiles/name/重新编写为example.com/name/ ,但是我们还想删除尾部的斜杠以进一步简化所得到的URL更漂亮的example.com/name – 就像现代社交媒体一样。

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /profiles/$1 [NC,L] 

这怎么做(安全地完成)? 我们已经看到了一些绊脚石的解决scheme如果组合可能会工作,但我们网站上的所有configuration文件目前有自己的物理目录,而不是通过脚本飞行组装。

更新: @ jon-lin提供了一个解决scheme,以类似的情况在如何访问目录的index.php没有一个结尾的斜线,并没有得到301redirect – 但我们没有弄清楚如何将其应用于我们(如上所述)。

你可以试试

RewriteRule ^(.*)/+$ $1 [R=301,L]

哪个应该适用于任何网址

您需要禁用目录斜杠

试试:

 DirectorySlash Off RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /profiles/$1 [NC,L] 

使用以下重定向:

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

通过添加@ jon-lin建议的部分代码, 如何访问目录的index.php,而不用结尾的斜杠,而不是301重定向 (内部重写后面的斜线),我们实际上做了这个工作:

 # Vanity URLs DirectorySlash Off RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /profiles/$1 [NC,L] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*[^/])$ /$1/ 

在FASHION NET(位于/profiles/gucci/ )的/profiles/gucci/现在可以通过https://www.fashion.net/gucci访问 – 没有斜线! 谢谢@ jon-lin !!!!