【问题标题】:PHP - mod_rewrite clean urls and query stringsPHP - mod_rewrite 干净的 url 和查询字符串
【发布时间】:2012-08-26 13:31:52
【问题描述】:
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI}/site1 [L,R=301]

RewriteRule ^/site1/catalogue/(\w+)/([0-9]+)$ catalogue.php?category=$1&product_id=$2 [QSA,L]

我遇到了一些 mod_rewrites 的问题。我正在尝试完成三件事:

1) 删除 www。来自网址

2) 删除 .php 扩展名

3) 有涉及 $_GET 变量的干净 url(查询字符串?)

例如,我想要这个网址:

http://www.domain.com/site1/catalogue.php?category=kitchen&product_id=2

变成了这样:

http://www.domain.com/site1/catalogue/kitchen/2

【问题讨论】:

  • 那么有什么问题吗?这个htaccess文件在哪里?在site1 目录或您的文档根目录中?
  • 你遇到了什么问题
  • @Jon Lin - 抱歉,不够具体。是的,我的 .htaccess 文件位于 site1 文件夹/目录中。输入清理后的 url 似乎没有正确重定向我。我得到404。我假设问题是我对查询字符串的最后一个重写规则。
  • 在文件中运行phpinfo(); 并确保启用了 mod_rewrite.so 扩展。
  • @cilosis - 是的,我确实事先运行了 phpinfo() 并且启用了 mod_rewrite 模块。所以我有点困惑到底发生了什么。 :p 我已经问过我的网络托管服务提供商是否也启用了 mod_rewrite,他们向我保证是的。

标签: php .htaccess mod-rewrite


【解决方案1】:

是的,我的 .htaccess 文件位于 site1 文件夹/目录中。输入清理后的 url 似乎没有正确重定向我。我得到404。我假设问题是我对查询字符串的最后一个重写规则。

把最后一条规则改成这样:

RewriteRule ^catalogue/(\w+)/([0-9]+)$ catalogue.php?category=$1&product_id=$2 [QSA,L]

从正则表达式匹配中删除/site1/。还要在RewriteEngine On 之后添加:

RewriteBase /site1/

【讨论】:

  • 我已经尝试过您的解决方案,但不幸的是,在浏览器中输入清理后的 url 时仍然出现 404。无论出于何种原因,它似乎仍然没有重定向。
  • @user1307016 您确定它与第一条规则中重定向末尾的流浪/site1 没有任何关系吗? http%2://%3%{REQUEST_URI}/site1
  • 我已经从我的第一个重定向规则中删除了 /site1,但我的清理后的 url 仍然出现 404。我刚刚尝试用我的索引页面进行简单的重写,所以它会使用 RewriteRule ^home/?$ index.php [L] 将我带到domain.com/site1/home,并且该规则似乎有效。所以我确定我的 mod_rewrite 已启用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多