Apache-2.2

htaccess URL 重寫問題(特定於 CPanel 類型託管)

  • July 31, 2014

我在 Apache 2.2 CentOS(帶有 cPanel)上設置了一個應用程序。我遇到了 htaccess 的問題。我已經確認 mod_rewrite 正在工作。我的 .htaccess 文件佈局如下:

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php 

我的 webapp 文件夾基本上有一個文件 index.php ,所有的 URL 請求都需要通過這個文件來引導。

我嘗試了以下方法,似乎我的 .htaccess 或 httpconf 有問題:

  1. 從 htaccess 中刪除所有內容仍會訪問 index.php 文件(可能是查找 index.php 的預設行為)
  2. 我更改了索引文件的名稱,因此應用程序根目錄中沒有名為 index 的文件 - 它拋出了 403 。
  3. 如果我註釋掉RewriteCond %{REQUEST_FILENAME} !-d它會拋出 404
  4. Deny from all按預期拋出 403
  5. 使用此配置,當我嘗試訪問它們時,所有其他沒有單獨 htaccess 的目錄(例如包含 CSS/圖像等的目錄)都會拋出 403

可能的問題領域

  1. .htaccess 文件
  2. httpd conf中的虛擬主機/目錄配置
  3. 文件夾上的 Apache 使用者權限問題(不太可能)

找出問題所在以及如何糾正它的方法可能是什麼?

編輯

我查看了伺服器 error_log,這就是我發現的:

[Thu Jan 17 07:44:45 2013] [error] [client 182.68.43.96] File does not exist: /usr/local/apache/htdocs/home

[Thu Jan 17 07:44:45 2013][error] [client 182.68.43.96] File does not exist: /usr/local/apache/htdocs/home, referer: http://IP_ADDRESS_HERE/~myapp/myapp/user

當 apache htdocs 出現在備用目錄中時,它正在尋找文件。即便如此,它也不應該在 myapp 下尋找一個名為 ‘user’ 的目錄,它應該按照 htaccess 文件重定向到 index.php。我重新編寫了基礎,現在它在 myapp 目錄下查找,但是它仍然沒有執行 index.php,因為它應該在每個請求中執行。

終於能夠解決這個問題了。如果您將 VPS 與 cpanel 或類似文件一起託管在您的文件不在 apache 的 htdocs 文件夾中,則該問題非常具體。

.htaccess 的最後一行應該是:

RewriteRule . /~cpanel_account_name/app_folder/index.php 

這有很大幫助:http: //htaccess.madewithlove.be/

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