mod_rewrite:重定向后我的链接不再有效

时间:2014-07-09 00:33:16

标签: apache .htaccess mod-rewrite redirect

我的.htaccess包含:

RewriteEngine On

# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ /subdirectory/$1 [L,R=301]

# capture user name
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(\w+)$ index.php?user=$1

ErrorDocument 404 /subdirectory/index.php 

我的意图是:

一切正常,但我的问题是当有人输入像......这样的网址时

http://domain.com/subdirectory/james/yyy
http://domain.com/subdirectory/james/yyy/zzz
http://domain.com/subdirectory/james/yyy/zzz/nonexistent.html

...他们被重定向到我的/subdirectory/index.php,index.php中的所有链接如:

<link rel="stylesheet" type="text/css" href="something.css">
<script type="text/javascript" src="lib/something.js"></script>
<img src="images/picture.jpg">

......对以下内容进行诽谤:

<link rel="stylesheet" type="text/css" href="/james/yyy/zzz/something.css">
<script type="text/javascript" src="/james/yyy/zzz/lib/something.js"></script>
<img src="/james/yyy/zzz/images/picture.jpg">

我可能做错了什么?我对尾随斜杠的处理是否正确?我使用ErrorDocument是正确的方法吗?

这是我第一次尝试使用.htaccess和mod_rewrite。这也是我的第一个Stackoverflow问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

我通过创建包含以下内容的404.php文件解决了我的问题:

<? header('location: /subdirectory'); ?> // redirect to a valid subdirectory/file

并将我的ErrorDocument条目更改为:

ErrorDocument 404 /subdirectory/404.php 

显然,问题在于使用相对链接。上述解决方案允许我保留原始的相对链接。

我希望这对某人也有帮助。