2013-01-11 21 views
2

我設置了一個系統,通配符子域指向子文件夾。除了我以外的原因,這必須通過.htaccess完成。例如,重定向http://subdomain.example.com到目錄/子/ example.com的的public_html下,以下部分作品(與感謝this Q&A):只有.php文件循環使用.htaccess重定向

RewriteEngine On 
RewriteRule ^subdomain/ - [L] 
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ 
RewriteRule ^(.*)$ /subdomain/$1 [L] 

它的工作對所有類型的文件除外,如果他們有擴展名.php。例如,如果我在/ subdomain /目錄中刪除sometext.txt文件,我可以在http://subdomain.example.com/sometext.txt處得到它,但是如果我將文本文件的擴展名更改爲.php,則會因爲重定向循環而出現500錯誤。

這讓我覺得有一些奇怪的事情發生在PHP模塊如何嘗試讀取文件。或者是Apache和PHP之間的關係。我對此並不熟悉;這就是爲什麼我問。

我在共享主機上,因此無法訪問Apache配置。

+0

另外要注意:如果我瀏覽到http://www.example.com/subdomain/sometext.php,它的工作原理。但是http://subdomain.example.com/sometext.php循環。 –

+0

php的內容是什麼?沒有特別的權利?你能把它做成一個簡單的echo'hello'只有 – fedmich

+0

可能最簡單的方法是啓用[RewriteLog](http://httpd.apache.org/docs/2.2/mod/mod_rewrite。 html#rewritelog),並看看發生了什麼。 –

回答

0

正如我的網址懷疑,問題是由託管服務提供商的配置造成的。 .htaccess很好。我被告知這是DirectAdmin中最近發現的一個使用php-fpm和FastCgi發現的問題。 (該解決方案是爲了他們刪除一個符號鏈接到我的主目錄下的public_html,並將其替換爲一個空目錄。我不知道更多關於此!)

感謝所有!

0

你可以試試,如果這樣做是否適合你?

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^subdomain\.localhost$ 
RewriteRule ^(.*)$ http://localhost/subdomain/$1 [L] 

所以不是localhost,直接嘗試直接添加您的實際域名url。

我測試了這個在我的本地,這樣的網址,然後再重定向他們正確

http://subdomain.localhost/test.txt 
http://subdomain.localhost/test.php 

我會建議放鬆一下,喝咖啡和復出。 (有時這會有所幫助)

然後只關注重定向,他們的Apache配置

    • 排除問題,你可以不用回合只test.php的,沒有索引301後
    • 工作.PHP

    試試這個在您的調試:

    • 關閉所有其他chrome瀏覽器選項卡。
    • 隱姓埋名打開,你想測試
    • 閉上那隱姓埋名所以它總是肯定完全刷新
    • 變化htacess文件,始終打開一個新的隱身標籤
  • +0

    是的,正如我在第一個評論中對我的原始問題所指出的那樣,但這不是一個解決方案,因爲它是302重定向消耗掉了subdomain.example.com。 –

    +0

    您是否試過我的代碼?如果你注意到你的代碼的第2行,RewriteRule^subdomain/- [L] < - 這是它重定向的循環 – fedmich

    +0

    實際上,該行停止循環。無論是RewriteCond%{REQUEST_URI}!^ /子域 - 否則_everything_循環。 –