我以前在https://example.com/myapp/doc/file.html
有一个文档文件,但我现在决定在https://example.com/myapp/doc/
上托管文档。注意,路径可以是不同的,例如, http://customer.com:8080/foo/bar/myapp/doc/file.html
。
如何使用htaccess重定向到正确的目录?我的尝试是:
RewriteEngine On
RewriteRule ^file\.html$ "" [R=301]
这会将文件系统路径放在URL中,并且完全不适合。如果我想要一个内部重定向它可能会工作,但我明确地想要一个301。
RewriteEngine On
RewriteRule ^file\.html$ "%{REQUEST_SCHEME}://%{HTTP_HOST}/myapp/doc/" [R=301]
这样可行,但只有当我的应用程序安装到URL根目录中时才有效。当客户将其放入/foo/bar
时,它会失败。
如何301重定向到当前目录?
答案 0 :(得分:2)
以下代码应该可以在任何位置将当前目录中的file.html
重定向到当前目录本身,而无需对路径进行任何硬编码。它将REQUEST_URI
变量(完整路径)与RewriteRule
匹配的URI(相对于当前路径)进行比较,并在%{ENV:BASE}
变量中得到差异。
RewriteEngine On
# find rewrite base dynamically
RewriteCond $0#%{REQUEST_URI} ^([^#]*)#(.*)\1$
RewriteRule ^.*$ - [E=BASE:%2]
RewriteRule ^file\.html$ %{ENV:BASE} [L,R=301,NC]
例如,它将执行以下重定向:
/foo/bar/myapp/doc/file.html
至/foo/bar/myapp/doc/
/myapp/doc/file.html
至/myapp/doc/
/some/path/file.html
至/some/path/