Apache-2.2

即使在重定向到 .htaccess 中的特定文件後也得到“302 Found”

  • January 25, 2019

我有一個託管在 EC2 實例上的 Apache 伺服器,它指向我擁有的域。現在,我基本上想要完成的是,.json當使用者嘗試 curl 域時,Web 伺服器應該返回一個文件。

例如。$curl mydomain.com

我的000-default.conf文件位於/etc/apache2/sites-available/如下所示。我添加了<Directory>啟動.htaccess位於我的/var/www/html文件夾中的文件的部分,該文件夾也是我網站的根目錄。

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<Directory /var/www/html/>
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>

我的.htaccess文件如下所示:

RewriteEngine On
RewriteCo "%{HTTP_USER_AGENT}" curl
RewriteRule ^(.*)$ "/var/www/html/resume.json" [L,R=302]

我的/var/www/html目錄看起來像這樣:

/.well-known
.htaccess
index.html
resume.json

我已經瀏覽了許多範例和教程,並且使用了來自各處的點點滴滴,直到我需要做一些特定的事情。不幸的是,當我嘗試捲曲我的域時,我收到以下消息。

C:\Users\example >curl example.com/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://example.com">here</a>.</p>
<hr>
<address>Apache/2.4.29 (Ubuntu) Server at example.com Port 80</address>
</body></html>

我想知道我在配置方面做錯了什麼,我無法.json在終端上顯示它。

當您使用 CURL 時,您需要使用該-L標誌來跟踪重定向,否則您只會看到重定向響應,這就是您所看到的。(因為那是你的.htaccess指令正在做的事情。)

.htaccess但是,您的文件中有錯誤…

您的.htaccess文件(來自您的“螢幕抓取”):

RewriteEngine On
RewriteCo "%{HTTP_USER_AGENT}" curl
RewriteRule ^(.*)$ "/var/www/html/resume.json" [L,R=302]

RewriteCo行是一個明顯的語法錯誤 - 所以我認為它不能在您的實際文件中?

  • "/var/www/html/resume.json"- 在.htaccess中,RewriteRule 替換採用 URL 路徑(相對於文件根目錄) - 您提供了一個絕對文件系統路徑,這將不起作用。
  • ^(.*)$- 您的RewriteRule 模式也匹配所有內容,因此這將導致重定向循環。如果您只想重定向文件根目錄,那麼您應該使用^$

請嘗試以下操作:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} curl
RewriteRule ^$ /resume.json [R=302,L]

但是,您真的要從外部重定向請求嗎?這應該是內部重寫

RewriteRule ^$ /resume.json [T=application/json,L]

*旁白:*看起來您的<Directory>部分“浮動”在<VirtualHost>容器之外 - 這不應該在虛擬主機內嗎?

引用自:https://serverfault.com/questions/950668