这是我的问题:
假设我有一个网站www.example.com
。我有一个应用程序subdir
位于该域的文档根目录的子目录中:
/home/example/public_html/subdir/
subdir
包含此.htaccess
:
# Redirect trailing slash if not a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /subdir/$1 [L,R=301]
有效。如果我转到http://www.example.com/subdir/not_a_directory/(显然假设not_a_directory
不是目录),我会被重定向到http://www.example.com/subdir/not_a_directory这就是我想要的。
但我不想在重写规则中指定subdir
或.htaccess
中的任何位置。我希望能够在不破坏任何内容的情况下更改应用程序的路径。我试过以下......
# Redirect trailing slash if not a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]
但我被重定向到:http://www.example.com/home/example/public_html/subdir/not_a_directory
我有点理解为什么会发生这种情况(重写规则的相对路径返回文件系统路径,而绝对或根绝对路径返回URL),但我无法弄清楚如何实现我正在寻找的东西对
有没有办法让RewriteRule
中的捕获组包含路径的subdir
部分?我也试过设置RewriteBase /
,但它似乎没有改变任何东西。
重写规则让我很困惑,所以任何帮助都会非常感激。谢谢!
答案 0 :(得分:1)
您可以使用此规则,而无需在.htaccess:
中的任何位置指定subdir
RewriteEngine On
# Remove trailing slash if not a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(/.+)/$
RewriteRule /$ %1 [L,R=301,NE]
从RewriteCond %{REQUEST_URI}
捕获路径允许我们捕获完整的URI路径。
答案 1 :(得分:0)
尝试使用此位置来重写基础
RewriteBase subdir/