通过entry.php重写URL

时间:2012-11-01 15:24:18

标签: php apache .htaccess clean-urls

我的应用程序目录下有两个目录

my_app:
  .htaccess
  lib:
    entry.php
  web:
    css:
      css_file1
      css_file2
    js:
      js_file1
      js_file2

我的网址将是http://example.com/my_app/my_path

my_app 目录下,有两个目录 web lib

如果 my_path 可以映射到 web 目录下的任何文件,请使用它。

例如,http://example.com/my_app/css/css_file1应映射到 my_app / web / css / css_file1

否则将其重定向到 lib / entry.php / my_path ,以便可以通过 $ _ SERVER ['PATH_INFO'] my_path >重定向应该是内部的。用户不应该看到重定向。

我想在 .htaccess 中编写配置来完成它。 我编写了下面给出的代码。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule (.*) ../web/$1  
    RewriteCond web/%{REQUEST_FILENAME} !-f 
    RewriteCond web/%{REQUEST_FILENAME} !-d 
    RewriteRule (.*) lib/entry.php/$1 
</IfModule>

但我收到了403错误。

1 个答案:

答案 0 :(得分:1)

我相信以下内容应该适用于/var/www/.htaccess,即直接位于$DOCUMENT_ROOT下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{DOCUMENT_ROOT}/$1/web/$2 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/$1/web/$2 -d
RewriteRule ^([^/]+)/(.*)$ $1/web/$1 [L]

RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^([^/]+)/(.*)$ $1/lib/entry.php/$2 [L]