【问题标题】:cannot pass query string values for rewritten URLs无法为重写的 URL 传递查询字符串值
【发布时间】:2012-02-02 13:02:55
【问题描述】:

我正在努力在网站上实施 URL 更改。首先,我只想在子目录级别实现此 URL 更改。我在根目录安装了 WordPress,但我正在创建自定义分类部分。它位于目录 /classifieds/ 中。因此,我只想重写此子目录中的 URL。

我已经设法使重写工作正常,只为分类子目录根据需要执行 301 并为 SEO 添加了尾随斜杠。我遇到的唯一问题是我的页面都没有传递查询字符串值。如何修改下面的 .htaccess 代码,以便在页面之间传递查询字符串?

IndexIgnore *

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.]+\.php(\?[^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.php$ http://www.mysite.com/classifieds/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ http://www.mysite.com/classifieds/$1/ [R=301,L]

redirect 301 /classifieds/index/ http://www.mysite.com/classifieds/

提前感谢所有帮助!

【问题讨论】:

  • 能否提供一个不传递查询字符串的URL示例

标签: php .htaccess query-string


【解决方案1】:

需要添加[QSA]Query String Attach

编辑

重写规则 ^(([^/]+/)*[^.]+).php$ http://www.mysite.com/classifieds/$1 [R=301,L,QSA]

重写规则 (.*)$ http://www.mysite.com/classifieds/$1/ [R=301,L,QSA]

【讨论】:

  • 我是一个非常初学者,您能告诉我代码中的哪些行需要[QSQ]添加请...
  • 我已经尝试了你的建议,但我仍然遇到了困难。添加 [QSA] 后,我得到以下 URL 输出:mysite.com/classifieds/view-ad/?user=0001
  • 伊恩,[QSA] 如何提供帮助?所有这一切都是为了指示重写引擎在替换字符串包含?... 时附加现有的query_string
  • 抱歉,我认为是问题所在。我现在要回家了,但如果没有其他人解决它,我明天再看看这个
  • @ianbarker 非常感谢您能快速浏览一下,我尝试的一切似乎都破坏了其他东西。再次感谢!
【解决方案2】:

如果我理解正确,您希望查询字符串在多个页面中持续存在,对吗?如果是这样,我知道的唯一方法是在页面上输出所有链接并附加查询字符串,这意味着这将在您的 PHP 文件中完成。

为此,您的链接输出时应在 url 末尾附加urlencode($_GET)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 2012-10-26
    • 2011-08-02
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多