在Apache上没有尾部斜杠的虚荣URL

时间:2015-10-20 05:10:15

标签: apache .htaccess mod-rewrite trailing-slash vanity-url

下面的代码将我们网站上/ profiles /目录中的所有网址从example.com/profiles/name/重写为example.com/name/,但我们也想删除结尾斜杠以进一步简化生成的网址到更漂亮example.com/name - 就像在现代社交媒体上一样。

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

如何做到这一点(并安全地完成)?我们已经看到了几个关于Stumble Upon的解决方案,如果合并可能会起作用,但我们网站上的所有配置文件目前都有自己的物理目录,而不是通过脚本动态组装。

更新: @ jon-lin在How to access directory's index.php without a trailing slash AND not get 301 redirect提供了类似情况的解决方案 - 但我们没有弄清楚如何将其应用到我们的(如上所述)。 / p>

4 个答案:

答案 0 :(得分:1)

您可以尝试

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

哪个适用于任何网址

答案 1 :(得分:0)

使用以下重定向:

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]

答案 2 :(得分:0)

您需要禁用目录斜杠

尝试:

DirectorySlash Off

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

答案 3 :(得分:0)

通过在How to access directory's index.php without a trailing slash AND not get 301 redirect添加@ jon-lin建议的部分代码(在内部重写尾部斜杠),我们实际上做了这个工作:

# Vanity URLs

DirectorySlash Off

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

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ /$1/

现在可以在https://www.fashion.net/gucci访问Gucci on FASHION NET(位于/profiles/gucci/)的个人资料 - 没有斜杠!谢谢,@ jon-lin !!!!