我有以下文件结构
| --- 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/css
和www.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]
请帮助我在哪里出错。
答案 0 :(得分:2)
但book.php文件包含CSS和JS文件,如www.domain.com/city/css和www.domain.com/city/js,因此会出现错误404.
我认为这是由于您使用包含css
和js
文件的相对路径。
为此,您可以在页面的HTML <head>
部分添加此内容:
<base href="/" />
以便从该基本网址解析每个相对网址,而不是从当前网页的网址解析。
编辑:要排除某些文件夹,请将此规则放在RewriteEngine
行下方
RewriteCond %{THE_REQUEST} /(pg|css|js|exclude1|exclude2)[/\s] [NC]
RewriteRule ^ - [L]