【发布时间】:2011-12-07 16:49:12
【问题描述】:
我正在尝试实现漂亮 URL 的基本 URL 重定向,并且由于图像、CSS 等也位于同一路径中,我需要确保如果访问 URL 时没有尾部斜杠,则添加它自动。
如果我这样输入绝对 URL,这会很好:
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ http://www.mydomain.com/myParentDir/$1/ [R,nc,L]
但是,如果我将其更改为相对 URL,这样我就不必每次在文件夹中移动内容时都更改它,这根本行不通。
这些都是我尝试过的,但都不起作用,或者将我重定向到服务器的实际内部目录路径,例如 /public_html/...:
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ ./myParentDir/$1/ [R,nc,L]
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ myParentDir/$1/ [R,nc,L]
进行 URL 重定向的正确方法是什么,以便用户输入如下内容:
http://www.mydomain.com/somedir/myVirtualParentDir/myVirtualSubdir
他被重定向到(通过 HTTP 301 或 302):
http://www.mydomain.com/somedir/myVirtualParentDir/myVirtualSubdir/
谢谢。
编辑:添加更多细节,因为它似乎并不清楚。 假设我正在实现一个画廊,并且我想使用 mod_rewrite 拥有漂亮的 URL。 所以,我想有如下网址:
http://www.mydomain.com/somedir/galleries/cats
显示猫的缩略图,而:
http://www.mydomain.com/somedir/galleries/cats/persian
它显示了所有猫的缩略图中的一张图像,名为 persian。 所以实际上物理目录结构和重写如下:
http://www.domain.com/somedir/gallery.php?category=cats&image=persian
所以我想做的是在 /somedir 中放置一个 .htaccess 文件,该文件捕获对 /galleries 的所有请求,并根据其后的虚拟子目录,将它们用作重写中的占位符,并使用 2 条重写规则:
RewriteRule ^galleries/(A-Z0-9_-]+)/$ ./gallery.php?category=$1 [nc]
RewriteRule ^galleries/(A-Z0-9_-]+)/+([A-Z0-9_-]+)$ ./gallery.php?category=$1&image=$2 [nc]
现在的问题是画廊脚本实际上需要一些 CSS、Javascript 和图像,分别位于 http://www.domain.com/somedir/css、http://www.domain.com/somedir/js 和 http://www.domain.com/somedir/images。
我不想硬编码任何绝对 URL,因此 CSS、JS 和图像将使用相对 URL(./css、./js、./images 等)来引用。所以我可以按如下方式重写 URL:
RewriteRule ^galleries/[A-Z0-9_-]+/css/(.*)$ ./css/$1 [nc]
问题是因为http://www.domain.com/somedir/galleries/cats是一个虚拟目录,所以上面的方法只有在用户输入时才有效:
http://www.domain.com/somedir/gallaries/cats/
如果用户省略了尾部斜杠 mod_dir 将不会添加它,因为实际上这个目录实际上并不存在。
如果我使用绝对 URL 进行重定向重写:
RewriteRule ^galleries/([A-Z0-9_-]+)$ http://www.mydomain.com/subdir/galleries/$1/ [R,nc,L]
但我不想硬编码 URL 前缀,因为我希望能够将它放在我想要的任何子目录中的任何域中,所以我尝试了这个:
RewriteRule ^galleries/([A-Z0-9_-]+)$ galleries/$1/ [R,nc,L]
但它会重定向到:
http://www.mydomain.com/home/myaccount/public_html/subdir/galleries/theRest
这显然不是我想要的。
编辑:进一步说明
我正在寻找的解决方案是避免在 .htaccess 中硬编码域名或文件夹路径。我正在寻找一种解决方案,如果我将 .htaccess 与其余的脚本和资源打包在一起,无论用户在他的 Web 服务器上将其解压缩到何处,它都可以开箱即用。除了这个斜杠问题之外,所有的工作都是这样的。
因此,任何涉及以任何方式在 .htaccess 中硬编码父目录或网络服务器路径的解决方案都不是我想要的。
【问题讨论】:
-
@DoktorJ 我的帖子的编辑回答了你的问题吗?
-
你应该选择你接受的答案,如果这里有任何帮助的话。
标签: apache mod-rewrite redirect