【发布时间】:2011-07-04 12:51:14
【问题描述】:
我正在将包含许多静态 html 页面的网站转换为由数据库驱动的网站。我的问题是我不想丢失谷歌已经索引的内容,所以我想重写通过 php 脚本发送的请求,该脚本在数据库中查找内容的文件路径。我的理解是 mod_rewrite 最适合这个目的,不幸的是我从未使用过它,所以我有点迷茫。
我有什么:
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
我想要的(我可能还需要对路径进行urlencode)(传递完整的uri也可以):
www.domain.com/index.php?page=/index.html OR www.domain.com/index.php?page=www.domain.com/index.html
www.domain.com/index.php?page=/page.html?var=123&flag=true
www.domain.com/index.php?page=/folder/subfolder/
www.domain.com/index.php?page=/folder/subfolder/index.html
www.domain.com/index.php?page=/folder/subfolder/new/test.html
www.domain.com/index.php?page=/folder/subfolder/new/test.html?var=123&flag=true
这是我的第一次尝试:
RewriteEngine On # Turn on rewriting
RewriteCond %{REQUEST_URI} .* # Do I even need this?
^(.*)$ /index.php?page=$1
想法?在此先感谢:)
编辑:
所以我尝试实施 Ragnar 的解决方案,但是当我使用“RewriteCond $1”或在最后一行包含“/”时,我不断收到 500 个错误。我已经设置了一个 test.php 文件,它将回显 GET_["page"] 所以我知道重写工作正常。到目前为止,我可以获得一些正确的输出(但仅当我不在 root 中时),例如:
RewriteEngine on
RewriteRule ^page/(.*)$ test.php?page=$1 [L]
如果我访问页面http://www.domain.com/page/test/subdirectory/page.html?var=123,它将输出“test/subdirectory/page.html”(缺少我需要的查询字符串)。但是,如果我使用这个例子:
RewriteEngine on
RewriteRule ^(.*)$ test.php?page=$1 [L]
如果我访问http://www.domain.com/page/test/subdirectory/page.html?var=123,它只会输出'test.php',这完全令人困惑。想法?
编辑#2:
看来我一直在做这一切都错了。我只是希望能够在我的 php 脚本页面中使用完整的 uri。完成我想要的最终工作解决方案如下:
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test.php
然后在我的 php 脚本中,我可以使用 $_SERVER['REQUEST_URI'] 来获得我需要的东西。我知道这应该比我尝试的更容易......
【问题讨论】:
-
如果 Edit #2 是解决方案,您应该将其作为解决方案发布,然后在几个小时后检查。
标签: apache mod-rewrite