【问题标题】:mod_rewrite for pretty url with uriencoded query stringsmod_rewrite 用于带有 uriencoded 查询字符串的漂亮 url
【发布时间】:2012-08-30 15:43:59
【问题描述】:

好的,所以我尝试了很多我在 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 美元只允许包含数字和句点,但我只想让它首先开放。

我不知道为什么它不起作用。在我的基本 url .htaccess 文件中,我有:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    哇,这花了很长时间很痛苦......希望它可以节省其他人一些时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 2014-04-03
      • 2013-09-14
      • 2017-04-25
      相关资源
      最近更新 更多