Apache 将站点上所有页面(包括子文件夹)的mod_重写为单个php页面
我正在将包含许多静态html页面的站点转换为由数据库驱动的站点。我的问题是,我不想丢失google已经索引的内容,所以我想重写通过php脚本发送的请求,该脚本查找数据库中内容的文件路径。我的理解是,修改最适合这个目的,不幸的是我从未使用过它,所以我有点迷茫 我所拥有的:Apache 将站点上所有页面(包括子文件夹)的mod_重写为单个php页面,apache,mod-rewrite,Apache,Mod Rewrite,我正在将包含许多静态html页面的站点转换为由数据库驱动的站点。我的问题是,我不想丢失google已经索引的内容,所以我想重写通过php脚本发送的请求,该脚本查找数据库中内容的文件路径。我的理解是,修改最适合这个目的,不幸的是我从未使用过它,所以我有点迷茫 我所拥有的: www.domain.com/index.html www.domain.com/page.html?var=123&flag=true www.domain.com/folder/subfolder/ www.doma
www.domain.com/index.html
www.domain.com/page.html?var=123&flag=true
www.domain.com/folder/subfolder/
www.domain.com/folder/subfolder/index.html
www.domain.com/folder/subfolder/new/test.html
www.domain.com/folder/subfolder/new/test.html?var=123&flag=true
我想要的(我可能还需要对路径进行URL编码)(传递完整的uri也可以):
这是我的第一次尝试:
RewriteEngine On # Turn on rewriting
RewriteCond %{REQUEST_URI} .* # Do I even need this?
^(.*)$ /index.php?page=$1
想法?提前感谢:)
编辑:
因此,我尝试实现Ragnar的解决方案,但当我使用“RewriteCond$1”或在最后一行包含“/”时,我不断收到500个错误。我已经设置了一个test.php文件,它将回显GET_u[“page”],因此我知道重写工作正常。到目前为止,我可以获得一些正确的输出(但仅当我不在root中时),例如:
RewriteEngine on
RewriteRule ^page/(.*)$ test.php?page=$1 [L]
如果我访问该页面,它将输出“test/subdirectory/page.html”(缺少我需要的查询字符串)。但是,如果我使用此示例:
RewriteEngine on
RewriteRule ^(.*)$ test.php?page=$1 [L]
如果我访问它,它只会输出'test.php',这完全令人困惑。想法
编辑#2:
看来我在这件事上做错了。我只是希望能够在我的php脚本页面中使用完整的uri。要实现我的目标,最终的工作解决方案如下:
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test.php
然后在我的php脚本中,我可以使用$\u SERVER['REQUEST\u URI']来获取我需要的内容。我知道这应该比我尝试的更容易…我建议您研究一下,它包含大量关于重写示例的信息 如果我没弄错的话,你应该可以用这样的东西
RewriteEngine on
RewriteCond $1
RewriteRule ^(.*)$ index.php/?page=$1 [L]
这与你发布的代码非常相似。如果你想得到更好的信息,请具体说明你的问题。没有必要写这么多行,这只会使事情复杂化 您只需在
中输入两行即可。htaccess
:
重新编写引擎打开
#重写规则-:ar1路径=相对。ar2如果是相对的,则表示要重写基。
重写规则^foo/bar/index\.php$/foo/bar/index.php
#..断言ar1取消匹配正确的url
PHP中的 您可以使用以下命令在PHP中输出rewriterule的第一个输入:
<?=$_SERVER['REQUEST_URI'];
电路中断和未设计的使用 断路器需要以下任一项:
重新编写引擎打开
#重写规则-:ar1路径=相对。ar2如果是相对的,则表示要重写基。
重写规则^bar/index.php
#..电路中断,因此如果绝对,则断言ar2,否则,htaccess parentfolder=root,htaccess parentfolder不在解释的ar2中。
重写基/foo
#…必须是绝对的[开始]。允许走小路[如和]
感谢您的回复,很高兴看到我走上了正确的道路。最后一行的urlencoding$1有什么提示吗?@veerman,请参阅。@veerman,只要它是透明重定向(即不是重定向到新域),您就不必费心传递$1
。只需执行透明重定向,您就可以使用通常的方式从脚本中读取路径:echo$\u SERVER['REQUEST\u URI']
。C我的答案。如果编辑#2是解决方案,你应该将其作为解决方案发布,然后在几个小时后检查。
<?=$_SERVER['REQUEST_URI'];