mod_rewrite用于具有uriencoded查询字符串的漂亮url

时间:2012-09-05 20:54:38

标签: mod-rewrite query-string friendly-url uriencoding

好的,所以我尝试了很多我在SO和其他地方找到的东西,但是我无法让它工作,总是收到404错误代码。

我想输入这个网址:

memorizeit.com/pics/220.0.8251.20120905002352.7982368227/Jameson+tested+the+MemorizeIt%21+Android+app%3A+With+Facebook+%26+Twitter.+Getting+grass+stains.

并将其无形转换为:

memorizeit.com/pics/index.php?pic=220.0.8251.20120905002352.7982368227&title=Jameson+tested+the+MemorizeIt%21+Android+app%3A+With+Facebook+%26+Twitter

index.php页面正在寻找:

$pic = ($_GET["pic"]);
$title = ($_GET["title"]);

在/ pics目录中的.htaccess文件中,我有以下内容:

RewriteEngine on
Header set Cache-Control "max-age=2592000"
RewriteRule ^pics/([^\/]*)/([^\/]*)/([^\/]*)$ /pics/index.php?pic=$1&title=$2&extra=$3 [L,QSA]
RewriteRule ^pics/(.+)/(.+)$ /pics/index.php?pic=$1&title=$2 [L,QSA]
RewriteRule ^pics/([^\/]*)$ /pics/index.php?pic=$1 [L,QSA]

我在没有QSA的情况下尝试过它,我已经尝试了它。+(任何东西)和[^ /] *(除了/之外的任何东西)我都把它们都放进去了所以你可以看到我把它们放在那里(我认为!)。我打算让$ 1允许只包括数字和句号,但我只是想让它首先开放。

我无法弄清楚它为什么不起作用。在我的基本网址.htaccess文件中,我有:

RewriteCond %{SERVER_PORT} ^80$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

它总是重定向到https,所以我知道正在读取.htaccess文件。我不知道还有什么可以尝试的。任何想法将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,因为pics /是一个真正的目录,重写更难以实现,而不是继续并重写它。所以我在匹配语句中将pics /更改为p /并将规则移动到基本.htaccess文件,它按预期工作。

哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇