【问题标题】:htaccess Rewrite URL to remove $_GET query for only one php file [duplicate]htaccess 重写 URL 以仅删除一个 php 文件的 $_GET 查询[重复]
【发布时间】:2015-02-25 02:22:39
【问题描述】:

我正在制作一个使用 $_GET 方法在页面上显示某些信息的网站。我在我的 htaccess 文件中格式化页面的 URL 时遇到了一些问题,因为我想删除变量并缩短我的 URL 以改进 URL 的结构和层次结构。

我目前的网址如下:

site.com/project?pn=my_project

“pn”变量指的是从服务器获取的项目名称。我想要结束的是一种使 URL 如下所示的方式:

site.com/my-project

我想确保“site.com/home”和其他类似页面不受影响,并且空格不被视为下划线,而是被视为 heiphens。

我将如何进行这些更改?

请注意,我当前的 htaccess 文件包括以下内容(我想保留它)

RewriteEngine On
RewriteCond         %{REQUEST_FILENAME} !-f
RewriteRule         ^([^\.]+)$ $1.php [NC,L]

如果可以解释答案,以便我可以再次为另一页重写规则,我将非常感激。

【问题讨论】:

  • 如果不想深入重写规则,可以使用this生成器

标签: php .htaccess


【解决方案1】:

在 .htaccess 文件中,添加:

RewriteEngine On
RewriteRule ^page/(\d+) /page?referenceid=$1

您可以阅读有关mod_rewrite(允许这样做的插件)here 的所有信息。

【讨论】:

  • 您能否在此查询中添加指向参考表的链接?我不能让它工作。
  • 对不起;我不确定你是什么意思。我已经添加了官方文档的链接。你能澄清一下你需要什么吗?
  • 您能否再次通读这个问题,因为我已经重写它以使其更有意义。
  • 我注意到您已经大幅改写了问题并更改了您要使用的参数的名称。请不要那样做;它打破了问题和答案之间的关系。无论如何,您现有的规则将拦截请求并导致问题。 ^([^\.]+)$ 匹配没有. 的任何内容,包括my-project 之类的URL。 [L] 表示它将运行的最后一条规则。您需要将此规则放在该规则之上并在其上使用[L],以停止进一步处理。
【解决方案2】:

您需要使用重写规则。假设你使用的是 Apache,试试这个:

将这些规则放在文档根目录内的 .htaccess 文件中(如果您可以访问 apache2.conf,那就更好了)

RewriteEngine on
RewriteRule ^/?page(/.*)?$ %{DOCUMENT_ROOT}/page?referenceid=$1 [L]

^/?page(/.*)?$:匹配 /page/$1(? 标记确保与所有正则表达式兼容)

%{DOCUMENT_ROOT} 是全局或目录中文档根集的位置

$1是/page/后面的参数

[L] 表示停止处理任何遵循此规则的规则

只需在现有规则之后添加 RewriteRule。

【讨论】:

  • 由于我不知道 htaccess 重写,你能解释一下 '^/?page(/.*) 的部分吗?$ %{DOCUMENT_ROOT}/page?referenceid=$1 [L ]' 以便我可以再次将其用于其他页面?
  • 您能否再次通读这个问题,因为我已经重写它以使其更有意义。
  • 我在答案中添加了一些细节。让我知道重写规则是否对您有用,如果没有,我可以尝试改进它。
猜你喜欢
  • 2018-05-25
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
相关资源
最近更新 更多