我在本地计算机上的 d:\www\mysite
目录中有一个网站。我安装了 WAMPServer 并为我的站点设置了一个别名目录 mysite
。
因此,例如, http://localhost/mysite/static-resource.html
正确检索了位于 d:\www\mysite\static-resource.html
中的我的文件。
我的问题是我的 .htaccess
文件中的 URL 重写:
RewriteEngine On
RewriteRule ^articles/(\d+) ./article.php?id=$1
当我尝试访问
http://localhost/mysite/articles/1
时,我得到以下响应:我可以确认
article.php
中存在一个 d:\www\mysite\article.php
文件。过去,我将网站的根目录 (
d:\www\mysite
) 设置为 Apache 服务器的 DocumentRoot
(而不是默认的 c:\wamp\www
),在这种情况下,我的 URL 重写 工作 ,所以我当前的问题必须与我的网站在别名目录“后面”这一事实有关。我的
mysite.conf
文件的内容:Alias /mysite/ "d:/www/mysite/"
<Directory "d:/www/mysite/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>
最佳答案
我在您的重写规则中没有看到 RewriteBase。
在您的 .htaccess
中,添加 RewriteBase
规则。
RewriteEngine On
RewriteBase /mysite/
RewriteRule ^articles/(\d+) ./article.php?id=$1
由于您的
/mysite/
,RewriteBase 必须有 Alias /mysite/ "d:/www/mysite/"
如果只是
http://localhost/mysite
被访问,它应该返回一个 not found on this server
。如果您不希望发生这种情况,请在上面添加另一个别名,如下所示:
Alias /mysite "d:/www/mysite/"
或者
只是这个:
AliasMatch /mysite(/.*)? d:/www/mysite/$1
为什么是 RewriteBase?来自 RewriteBase Directive :
来自 RewriteBase Directive 的示例:
#
# /abc/def/.htaccess -- per-dir config file for directory /abc/def
# Remember: /abc/def is the physical path of /xyz, i.e., the server
# has a 'Alias /xyz /abc/def' directive e.g.
#
RewriteEngine On
# let the server know that we were reached via /xyz and not
# via the physical path prefix /abc/def
RewriteBase /xyz
# now the rewriting rules
RewriteRule ^oldstuff\.html$ newstuff.html
关于apache - 如果通过别名目录访问网站,则 URL 重写不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9254403/