1

这是我的网站的文件结构

css/
script/
images/
.htaccess
index.php
ajaxusername.php

.htaccess 内容

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(\w+)/(\w+)$ index.php?d=$1&t=$2 [QSA]
RewriteRule ^(\w+)/?$ index.php?d=$1


输入http://www.abc.com/peter/
可以成功翻译成http://www.abc.com/index.php?d=peter

当我输入http://www.abc.com/peter/password时,
它也可以成功转换为http://www.abc.com/index.php?d=peter&t=password


问题是:
/peter/可以成功获取上述文件夹中列出的资源,但
/peter/password无法获取这些资源。

当我签入 firebug 时,它显示它指向
http://www.abc.com/peter/css/user.css
这是一个无效的 URL。
正确的 URL 必须指向http://www.abc.com/css/user.css而不是前一个。

有什么建议吗?谢谢!!

4

2 回答 2

0

看起来您需要为对服务器上存在的文件和目录的请求的重写规则添加例外,否则当文件是客户端浏览器的请求时,由于 URL 被重写,它们将不会被提供。

尝试添加这些行:

RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? - [S=2]

进入您的 htaccess 文件:

Options +FollowSymlinks
RewriteEngine on

...put them here...

RewriteRule ^(\w+)/(\w+)$ index.php?d=$1&t=$2 [QSA]
RewriteRule ^(\w+)/?$ index.php?d=$1

你的资源应该是可访问的。

于 2013-07-08T15:31:47.127 回答
0

问题是您正在使用 css、js 和图像的相对路径,一旦您开始使用漂亮的 URL 方案,/part1/part2它就会弄乱资源的 URL。正如您所注意到的那样,css URI 变为/peter/css/user.css而不是/css/user.css.

这里有一些解决方案可以为您提供帮助。

解决方案 1:为了解决您的问题,我建议在您的 css、js、图像文件中使用绝对路径,而不是相对路径。这意味着您必须确保这些文件的路径http://以 slash 或 slash开头/

解决方案 2:对于静态文件(css、js、图像等)使用绝对路径无疑会更好。但是,如果您在多个页面中有很多这样的实例,那么请考虑使用HTML 基本标记来指定相对路径的默认 URL。例如:

<base href="http://www.abc.com/" />

解决方案 3:基于 mod_rewrite 的解决方案。当您无法实施上述解决方案时使用它。

你有这样的.htaccess:

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

# don't do anything for a real directory, file or link
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule - [L]

# your original rewrite rules
RewriteRule ^(\w+)/?$ /index.php?d=$1 [QSA,L]
RewriteRule ^(\w+)/(\w+)/?$ /index.php?d=$1&t=$2 [QSA,L]

# rules to fix wrong paths of css, js and images
RewriteRule ^[^/]+/((?:css|script|images)/.*)$ /$1 [L,R=301,NC]
于 2013-07-08T15:32:12.260 回答