将root重写为子文件夹(.htaccess),但某些目录除外

时间:2018-03-01 14:55:45

标签: php apache .htaccess routing

我有以下文件夹结构:

  • app /(包含index.php,js /,public /)
  • V1 /
  • 的.htaccess

对v1的请求应该照常工作 所有其他请求应该转到/ app而不更改URL

www.xxx.com/           (displays: app/index.php)
www.xxx.com/v1         (displays: v1/index.php)
www.xxx.com/js/xxx.js  (displays: app/js/xxx.js)

这可能吗?

基本上,静态文件夹: v1,app / js(不带app),app / public(不带应用)

所有其他请求都会转到 app / index.php 而不会更改网址。

2 个答案:

答案 0 :(得分:0)

要重写从/root/subfoldwr的请求,您可以在/.htaccess

中使用以下规则
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /app/index.php  [L]

这会将除{strong>现有文件/目录之外的所有内容从您的/root饲料重写为/app/index.php

答案 1 :(得分:0)

您可以在站点根目录中使用此规则.htaccess:

RewriteEngine On

# landing page
RewriteRule ^/?$ app/index.php [L]

# if v1/file exists then use it
RewriteCond %{DOCUMENT_ROOT}/v1/$1 -f
RewriteRule .+ v1/$0 [L]

# if app/public/file exists then use it
RewriteCond %{DOCUMENT_ROOT}/app/public/$1 -f
RewriteRule .+ app/public/$0 [L]

# if app/js/file exists then use it
RewriteCond %{DOCUMENT_ROOT}/app/js/$1 -f
RewriteRule .+ app/js/$0 [L]

# if not a file, not a dir and not starting with v1    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !^v1/ app/index.php [L,NC]