【问题标题】:Split two $_GET variables into path将两个 $_GET 变量拆分为路径
【发布时间】:2015-01-29 21:31:04
【问题描述】:

我正在尝试编写一个类似于以下内容的重写规则:

www.sitename.com/products.php?p=product&c=category 

应该变成

www.sitename.com/product/category

我尝试了以下方法,但我的 RegEx 知识远非理想,以下方法不起作用

RewriteRule ^(.*)/(.*)$ products.php?p=$1&c=$2 [QSA,L]

非常感谢任何帮助!

【问题讨论】:

  • 直接位于网站根目录,没有其他规则。
  • 需要更多信息。您想使用此规则处理哪些 URL?还有更多规则等吗?
  • 我只希望 products.php 及其两个变量重定向到 site.com/var1/var2 。我希望所有其他路径都能正常工作并保持相同。我要添加的唯一其他规则是RewriteRule ^(.*)\.html$ $1\.php [QSA,L],因此它将简单文件的 php 扩展名转换为 html。

标签: php regex apache mod-rewrite


【解决方案1】:

您可以在DOCUMENT_ROOT/.htaccess 文件中使用此代码:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/([\w-]+)/?$ products.php?p=$1&c=$2 [QSA,L]

RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)\.html$ $1.php [NC,L]

【讨论】:

  • 它部分工作,但我想它对我的作用比你的代码更多。我正在我的本地主机上对此进行测试,所有内容都在一个文件夹中。所以我通过 localhost/sitename 访问该网站。我已将 RewriteBase 更改为 /sitename/ 并且第一部分(products.php 之一)工作正常,不幸的是 php 到 html 文件名的转换返回“未找到”。知道我做错了什么吗?谢谢!
  • 对于那个条件需要:RewriteCond %{DOCUMENT_ROOT}/sitename/$1\.php -f [NC]
【解决方案2】:

尝试将(.*) 替换为([^/]+)

【讨论】:

  • 这似乎成功了,但不幸的是,现在任何像 www.site.com/fund/aaa/bula/a 这样的路径都会转到 products.php ...
  • 是的,出于这个原因,我喜欢将所有路由中的第一个 uri 段设为静态。
  • 我怎样才能使片段静态以避免这种行为?谢谢!
  • RewriteRule ^products/(.*)/(.*)$ products.php?p=$1&c=$2 [QSA,L], RewriteRule ^funds/(.*)/(.*)$ fund.php?p=$1&c=$2 [QSA,L] 等等
  • 该解决方案也可以正常工作,谢谢!我确实选择了 anubhava 的回应,因为它完全按照想要的方式工作,没有领先的部分。
【解决方案3】:

试试这样的:

RewriteRule www.sitename.com/(.*)/(.*) $products.php?p=$1&c=$2 [QSA,L]

您可以在this site 中测试您的重写规则。

【讨论】:

  • 很遗憾,您的代码不起作用。该资源站点看起来也不错,不幸的是这似乎也不起作用。也许我错过了什么。
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 2013-12-10
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 2020-08-04
  • 2020-12-27
相关资源
最近更新 更多