【问题标题】:Apache Webserver RedirectApache 网络服务器重定向
【发布时间】:2018-04-13 06:47:17
【问题描述】:

我确定一个非常基本的问题,似乎无法在线找到解决方案。

我有一个带有虚拟主机配置的 Apache Webserver (Apache/2.4.6)。

DocumentRoot /path/to/content/folder

<Directory /path/to/content/>
                    RewriteEngine On
                    Order deny,allow
                    Require all granted
                    RewriteRule "^/p1$" "/p1/"
</Directory>

我有一个位于 /p1/ 中的 .htaccess 文件,它返回一个嵌入了 javascript 重定向的 html 文件(不是我的选择,代码已交给我)。

我正在尝试以这样一种方式配置它,以便将带有 /p1 的任何传入请求重定向到 /p1/ 文件夹,然后由位于内部的默认 .html 文件重定向。

是否可以在不关闭 DirectorySlash 或别名的情况下做到这一点?即是否有可能有一个重写规则来做到这一点?

【问题讨论】:

  • 我从中得到的是,您正在尝试将请求重定向到 /p1/ 到文件夹 /p1/。这不是默认情况下会去的地方吗?或者您是说您的网址中p1 的位置不同?
  • 对不起,如果不清楚,尝试映射以“/p1”结尾的 URL 以重定向到文件夹“/p1/” - 最终结果是如果我键入 /p1 我不' t 获得超时,而是重定向到 /p1/ (这是一个文件夹)。
  • 请提供网址示例。
  • 好的:如果我有一个 URL dns1.dev.net.au 并且我尝试导航到 dns1.dev.net.au/p1/ 工作正常,想要 dns1.dev.net.au /p1 也解决。 Document Root是:/path/to/content/folder,p1文件夹在/path/to/content/folder/p1/

标签: apache redirect mod-rewrite url-rewriting webserver


【解决方案1】:

要使尾部斜杠可选,请使用:

RewriteRule "^p1\/?$" "/p1/"

^$ 是我们的锚。

\/ 匹配单个正斜杠(反斜杠是转义字符)。

? 使上一个匹配成为可选。

因此,我们使用\/? 将 URL 的尾部斜杠设为可选

你也可以试试这个:

RewriteRule "^(.+)\/?$" "/$1/"

(.+) 匹配所有内容,然后我们添加可选的尾部斜杠(.+)\/?

/$1/ 重写为括号中匹配的内容。

因此 URL /foo/bar 将重定向到 foo/bar/

并且/bar/foo 重定向到/bar/foo/

重定向现在是动态的。

Here 是一个不错的正则表达式介绍。

This 也是一个很好的参考和实用程序,用于制定正则表达式模式。

【讨论】:

  • 谢谢。我都试过了,但我似乎没有发生重写。我已经确认启用了重写模块等。我确定这是正确的答案,会给它+1。必须与此设置有关(可能是因为坐在 ELB 后面)。我能得到的最好的结果是从 /p1 到 /p1/ 的 301 重定向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
相关资源
最近更新 更多