【问题标题】:.htaccess url rewrite - remove .php remove www. convert ?id=10 to /10.htaccess url 重写 - 删除 .php 删除 www。将 ?id=10 转换为 /10
【发布时间】:2011-08-06 00:42:46
【问题描述】:

正如标题所说,我需要一个非常复杂的 url 重写机制,用于 web 应用程序作为 .htaccess 规则。 我现在搜索了很多,尝试了数百种不同的重写规则。

所以,基本上这就是我需要的:
用户访问:http://www.site.com/product.php?id=12
服务器应重定向到:http://site.com/product/12

要提一下:
并非所有页面都会附加 ID。
所以我也有:http://www.site.com/some/page.php
然后应该重定向到:http://site.com/some/page

或从 http://site.com/anotherone.php 到 http://site.com/anotherone

非常感谢您的帮助,并提前非常感谢您的帮助!

【问题讨论】:

  • 向我们展示这 100 次尝试中的至少 1 次,以便我们了解您的前进方向。
  • @LazyOne 我已经放弃了其中的大部分,但是这个: RewriteRule ^/?([a-z]+)$ $1.php [L] 因为它是唯一至少可以工作的“一些如何”..

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)\.php$ http://%1/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)\.php\?id=([0-9]+)$ http://%1/$1/$2 [R=301,L]

【讨论】:

  • 抱歉,它不起作用?我去了site.com/product/10,我得到了404?与 site.com/some/page 或 site.com/this 相同 没有重定向或 url 重写?
  • @blub 您的描述(问题)和您要访问的 URL(上面的评论)是两件完全不同的事情——在您的问题中,您要求与 site.com/product/10 做相反的事情。首先决定/重新表述您的问题。
【解决方案2】:

我假设你之前激活了这个 mod_rewrite 规则:

用户转到 http://site.com/product/12 并在浏览器中显示此 URL,并且在内部,并且仅在内部,服务器服务 http://www.site.com/product.php?id=12

把第一个 RewriteCond 和 Rule this:

   RewriteCond %{ENV:REDIRECT_STATUS} !200
   RewriteRule ^(\w+)\.php\?id=(\d*)$ /$1/$2 [R=301]

当以 .php 结尾时,添加另一个以删除 .php

   RewriteCond %{ENV:REDIRECT_STATUS} !200
   RewriteRule ^(\w+)\.php$ /$1 [R=301]

【讨论】:

  • 不幸的是,这也不起作用 - 我从 page.php 重定向到页面,但是当我转到 site.com/product.php?id=10 时它显示了 404再次将我重定向到 */product?id10 和 404 :/ 我错过了什么吗?
猜你喜欢
  • 2018-05-25
  • 2016-01-02
  • 2013-09-15
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多