Apache-2.2

Apache mod_rewrite 規則沒有觸發?

  • January 1, 2015

我的伺服器上有 Twitch Plays Pokemon Reddit 更新的存檔 ( http://flarn2006.dyndns.org/tppupdates/ )。其中一些包含格式為“/u/ username ”的連結,這在 Reddit 上有效,但在我的網站上無效。(我指的不是最右邊的連結;這些是正確的。)我正在嘗試使用 mod_rewrite 自動重定向這些連結,因此如果它收到對“/u/任何東西”的請求,並且引薦來源網址包含“ /tppupdates/",它將重定向到 Reddit。

我的 apache2.conf 中有以下內容:

RewriteEngine on
RewriteCond %{HTTP_REFERER} /tppupdates/
RewriteRule ^/u/(.*)$ http://reddit.com/u/$1 [R=301]

然而,當我點擊其中一個有問題的連結時,它只會給我一個 404。怎麼了?

好吧,這裡有一個更完整的答案:

重寫引擎的工作方式並不完全相同,具體取決於重寫指令的位置。指令基本上有 2 個上下文:每個伺服器和每個目錄。它們如下:

| in apache2.conf files:
|
|   here it is per server
|
|   <VirtualHost>
|
|        per server
|
|        <Directory, Location, File or Proxy>
|
|           per dir !!!
|
|        </Directory, etc>
|   </VirtualHost>

在 .htaccess 中:總是每個目錄上下文

在每個伺服器上下文中,使用這個:

RewriteEngine on
RewriteCond %{HTTP_REFERER} /tppupdates/
RewriteRule ^/u/(.*)$ http://reddit.com/u/$1 [R=301]

根據您的範例,如果您在 web 根文件夾中,請在每個目錄上下文中使用它:

RewriteEngine on
RewriteCond %{HTTP_REFERER} /tppupdates/
RewriteRule ^u/(.*)$ http://reddit.com/u/$1 [R=301]

請注意/RewriteRule 中沒有第一個“”。

使用這些規則,您無需創建名為 /u 的目錄。

apache 文件中的更多資訊:RewriteRule、匹配內容和技術細節

你確定你想要這個RewriteCond嗎?

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