Apache-2.2
Apache mod_rewrite 規則沒有觸發?
我的伺服器上有 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
嗎?