从实时站点到localhost

时间:2013-08-15 02:46:03

标签: apache .htaccess mod-rewrite

我被要求在本地克隆一个实时网站。

我已经完成了所有设置并且完全有效,除了链接不正确之外,我已经更改了.htaccess

我的根网址是:

localhost/httpdocs

当我去:

localhost/httpdocs?path=homepage_video

例如,它成功转到主页视频。

但是,所有链接都已设置为:

localhost/httpdocs/homepage_video

我希望这些链接也能正常运作。

我的.htaccess就是这样:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ?path=$1 [L,QSA]

AddType text/x-component .htc
Options +FollowSymLinks

这对我来说显然不起作用,在主页localhost/httpdocs上,一切正常工作(所有图片和所有内容都正确连接,一切看起来都不错),但点击此处的链接将无效(因为如果它是?path=homepage_video,则/homepage_video无效。

1 个答案:

答案 0 :(得分:1)

将重写规则更改为

RewriteEngine On
RewriteBase /httpdocs/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(([^/]+/)*[^/]+)/?$ index.php?path=$1 [L,QSA]

编辑 :(此正则表达式如何工作?)

这匹配所有嵌套目录:

[^/]+/ = [^/]除了/之外的任何事情; +一次或多次; /后跟斜杠

([^/]+/)* = (..)*重复匹配()内的内容,*零次或多次

这匹配最后一个URL目录:

<nested-dir-regex>[^/]+ =除了/之外的任何事情;一次或多次+

(<nested-dir-regex>[^/]+) =周围()可以抓取为$1

(<nested-dir-regex>[^/]+)/? =可选,后跟最后/;匹配?零或一个

^(<nested-dir-regex>[^/]+)/?$ = ^表示路径字符串的开头; $表示路径字符串的结尾