重写以添加尾部斜杠,但独立于域?
Posted
技术标签:
【中文标题】重写以添加尾部斜杠,但独立于域?【英文标题】:Rewrite to add a trailing slash, but independent of domain? 【发布时间】:2011-10-27 22:28:12 【问题描述】:我正在使用 Apache 和 mod_rewrite 为我的 Web 应用程序重写 URL。你可以在这里看到它:
RewriteEngine On
RewriteBase /
# www. to non-www.
RewriteCond %HTTP_HOST ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Redirect non-existant files so there's a trailing slash
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_URI !(.*)/$
RewriteRule ^(.*)$ $1/ [R=301,L]
# Send the URL to index.php
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule .* index.php [L,QSA]
一切正常,但问题是尾部斜杠重写。它在我位于域的根目录时有效,但在我的暂存环境中,我在子目录中运行此应用程序。我必须修改 RewriteBase 指令以包含子目录,否则重写失败。
我正在寻找一种可以在 URL 中添加斜杠的解决方案——无论应用程序是否在服务器的根目录上运行,而无需更改 RewriteBase。提前致谢。
【问题讨论】:
【参考方案1】:经过@MortBM 的一些帮助,看起来下面的效果很好:
RewriteEngine On
# www. to non-www.
RewriteCond %HTTP_HOST ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Add a trailing slash to any non-existent files
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_URI !(.*)/$
RewriteRule ^(.*)$ %REQUEST_URI/ [R=301,L]
# Send the URI to index.php
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule .* index.php [QSA,L]
总结:删除RewriteBase
,并在重定向中使用%REQUEST_URI
做到了:)
【讨论】:
以上是关于重写以添加尾部斜杠,但独立于域?的主要内容,如果未能解决你的问题,请参考以下文章