2013-06-28 56 views
0

我有一個重定向器,它將URL中/之後的所有內容作爲參數提供給隱藏的index.php(然後將用戶使用js的window.location重定向到另一個域,主機不支持.htaccess的外部重定向),但是我丟失了代碼。每個文件(index.php,.htaccess)位於/ storage文件夾中。
的是的.htaccess這樣的事情,但我不能弄明白:使用RewriteRule給index.php提供參數

RewriteRule ^(.*) /?$1 [R,L] 

這一個正在重定向的無限循環。

它作爲輸入http://storage.mysite.com/file.png將打開http://storage.mysite.com/?file.png
我試圖避免使用在.htaccess直接調用的index.php,因爲它與這個重定向:

<?php 
    echo " 
     <script> 
     window.location='http://otherdomain.com/12345678".$_SERVER['REQUEST_URI']."' 
     </script> 
    "; // note there's no slash after the number, the REQUEST_URI had it 
?> 

什麼是做到這一點的正確方法?

回答

1

聽起來這是你需要的東西:

RewriteCond %{REQUEST_URI} !^/index.php 
RewriteRule ^(.*)$ index.php 

在PHP中,$_SERVER['REQUEST_URI']仍將是原來的請求的URI /file.png

擺脫R標誌將修復循環。另外,如下所述,不需要將請求URI作爲GET參數添加。
R標誌意味着新地址/?file.png被髮送到瀏覽器,然後瀏覽器對該URI發出新的請求。
刪除R標誌將意味着Apache服務於新文件index.php而不告訴瀏覽器。

這意味着雖然正在解析index.php,但請求URI仍然是/file.png

RewriteCond %{REQUEST_URI} !^/index.php表示如果請求是/index.php,那麼它不會被重寫。

我測試過了,它的工作原理。如果您有任何問題,請評論。

+0

謝謝,現在試試這個,而不是循環它直接到404,並沒有做任何重定向。如果這就是你的意圖,我完全用你的版本替換了htaccess文件中的先前規則。至少給'storage.mysite.com/?file.png'正確的去index.php,它會重定向。 – Exec

+0

因此要求'storage.mysite.com/file.png'給出404? 您在.htaccess中有任何其他規則嗎? – Hamish

+0

的的.htaccess包含此: '的RewriteCond%{REQUEST_URI} ^/index.php文件 重寫規則^(+)$的index.php 的ErrorDocument 404/404.php' 我已經添加了404行,以便它不!不會重定向到主機自己的404頁面。 – Exec

0

*表示「0或更多」。如果你只想重定向,如果至少有一個,那麼你應該使用+

相關問題