Apache 上没有尾部斜杠的虚 URL
Vanity URLs without trailing slashes on Apache
下面的代码将我们网站上 /profiles/ 目录中的所有 URL 从 example.com/profiles/name/
重写为 example.com/name/
,但我们还想删除结尾的斜杠以进一步简化生成的 URL变得更漂亮 example.com/name
-- 就像在现代社交媒体上一样。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /profiles/ [NC,L]
如何做到(并且安全地做到)?我们已经在 Stumble Upon 上看到了几个解决方案,如果结合起来可能会奏效,但我们网站上的所有配置文件目前都有自己的物理目录,而不是通过脚本即时组装。
更新: @jon-lin 在 How to access directory's index.php without a trailing slash AND not get 301 redirect 提供了一个类似情况的解决方案——但我们没有弄清楚如何将它应用到我们的(如上所述)。
你可以试试
RewriteRule ^(.*)/+$ [R=301,L]
哪个应该适用于任何 url
使用以下重定向:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /(.+)/+$
RewriteRule ^ /%1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /profiles/[=10=] [NC,L]
您需要禁用目录斜杠
尝试:
DirectorySlash Off
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /profiles/ [NC,L]
通过在 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/ [NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ //
现在可以在 https://www.fashion.net/gucci 访问 FASHION NET(位于 /profiles/gucci/
)上的 Gucci 简介 -- 没有尾部斜杠!谢谢@jon-lin!!!!
下面的代码将我们网站上 /profiles/ 目录中的所有 URL 从 example.com/profiles/name/
重写为 example.com/name/
,但我们还想删除结尾的斜杠以进一步简化生成的 URL变得更漂亮 example.com/name
-- 就像在现代社交媒体上一样。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /profiles/ [NC,L]
如何做到(并且安全地做到)?我们已经在 Stumble Upon 上看到了几个解决方案,如果结合起来可能会奏效,但我们网站上的所有配置文件目前都有自己的物理目录,而不是通过脚本即时组装。
更新: @jon-lin 在 How to access directory's index.php without a trailing slash AND not get 301 redirect 提供了一个类似情况的解决方案——但我们没有弄清楚如何将它应用到我们的(如上所述)。
你可以试试
RewriteRule ^(.*)/+$ [R=301,L]
哪个应该适用于任何 url
使用以下重定向:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /(.+)/+$
RewriteRule ^ /%1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /profiles/[=10=] [NC,L]
您需要禁用目录斜杠
尝试:
DirectorySlash Off
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /profiles/ [NC,L]
通过在 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/ [NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ //
现在可以在 https://www.fashion.net/gucci 访问 FASHION NET(位于 /profiles/gucci/
)上的 Gucci 简介 -- 没有尾部斜杠!谢谢@jon-lin!!!!