我的.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问题。
谢谢!
答案 0 :(得分:0)
我通过创建包含以下内容的404.php文件解决了我的问题:
<? header('location: /subdirectory'); ?> // redirect to a valid subdirectory/file
并将我的ErrorDocument条目更改为:
ErrorDocument 404 /subdirectory/404.php
显然,问题在于使用相对链接。上述解决方案允许我保留原始的相对链接。
我希望这对某人也有帮助。