2015-08-23 65 views
0

我有一個項目,前端爲angularjs,後端爲api。因此,我想將任何api /(...)映射到server/index.php,並將任何其他映射到index.html。但是我不能讓它們和.htaccess一起使用。 api /(...)將直接指向index.html而不是index.php。.htaccess重定向到index.html和index.php不能一起工作

這是我使用的htaccess:

RewriteEngine on 
RewriteBase/
RewriteRule ^api/ server/index.php [L] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} !\.private/ 
RewriteRule \.(jpg|png|js|css|html)$ - [L] 
RewriteRule ^.* index.html [L] 

這是文件結構我現在有(有一些文件省略):

root/ 
    index.html 
    server/ 
     index.php 
    .htaccess 

我嘗試添加一些隨機字符.htaccess文件,並得到500錯誤,所以.htaccess文件的作品。我也嘗試刪除index.html規則的最後一行,並在註釋掉之後運行api。

請幫我解決這個問題,謝謝!

回答

0

我終於想通了,爲什麼在這個環節最好的答案 - >view

的問題是,[L]命令不會完全終止重寫的過程,它會再次開始匹配。所以在第一次迭代中,api /將被更改爲server/index.php。然後在下一次迭代中,server/index.php將與index.html匹配。

當模式和替代方法相同時,Apache將終止重寫過程。所以解決它的方法是添加終止規則。我更新我的htaccess,現在它工作。

RewriteEngine on 

# Final rule for assets 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} !\.private/ 
RewriteRule \.(php|jpg|png|js|css|html)$ - [L] 

# Final rule for back end index 
RewriteRule ^server/index\.php$ - [L] 
# Redirect to back end index 
RewriteRule ^api$ server/index.php [L] 
RewriteRule ^api/.* server/index.php [L] 

# Final rule for front end index 
RewriteRule ^index\.html$ - [L] 
# Redirect to front end index 
RewriteRule ^.* index.html [L] 
相關問題