Mod Rewrite - 为特定文件夹禁用它

时间:2015-06-08 02:21:02

标签: php css apache .htaccess mod-rewrite

我有以下文件结构

| --- API

| --- CSS

| --- IMG

| --- JS

|的index.php

| rewrite.php

| book.php中

我基本上做的是,将每个请求重定向到rewrite.php,然后根据请求URI的第一个参数,include通过PHP对应的页面。

我的rewrite.php文件:

 $path = rtrim($_SERVER['REQUEST_URI'], "/");
 $elements = explode('/', $path); 

 if($elements[1] == "about-us") //Something like www.domain.com/about-us
 {
    require_once("about-us.php");
 }

如需预订,请查看以下内容:(如www.domain.com/city/service)

 if($elements[1] == "somecityname" && $elements[2] != "")
 {
    $_GET["serviceID"] = Service ID of service retrieved through DB;
    require_once("book.php");
 }

但是book.php文件将CSS和JS文件包含为www.domain.com/city/csswww.domain.com/city/js,因此会出现错误404.

我的HTACCESS存在一些问题。我当前的文件是:

RewriteEngine on
RewriteCond %{THE_REQUEST} /(pg|api|css|js|lib|customerapi|agentapi)[/\s] [NC]
RewriteRule ^ - [L]

#rewrite to https and www
# Redirect to domain with www.
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^(www|\d+)\.
RewriteRule .* http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

#remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^(.+?)/$ /$1 [R=301,L]

#rewrite url
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /rewrite.php [L,QSA]

请帮助我在哪里出错。

1 个答案:

答案 0 :(得分:2)

  

但book.php文件包含CSS和JS文件,如www.domain.com/city/css和www.domain.com/city/js,因此会出现错误404.

我认为这是由于您使用包含cssjs文件的相对路径。

为此,您可以在页面的HTML <head>部分添加此内容:

<base href="/" />

以便从该基本网址解析每个相对网址,而不是从当前网页的网址解析。

编辑:要排除某些文件夹,请将此规则放在RewriteEngine行下方

RewriteCond %{THE_REQUEST} /(pg|css|js|exclude1|exclude2)[/\s] [NC]
RewriteRule ^ - [L]