如何使用 .htaccess 重写 URL 而不会影响 $GET 数据

Posted

技术标签:

【中文标题】如何使用 .htaccess 重写 URL 而不会影响 $GET 数据【英文标题】:How do I rewrite URL using .htacess without consequences for $_GET data 【发布时间】:2016-06-03 13:43:06 【问题描述】:

我想用一些 $_GET 数据更改我的 URL,例如:

http://www.website.com/articles.php?article=article_title_stored_in_database
http://www.website.com/simple_page.php?page=page_title_stored_in_database

让它们看起来像这样:

http://www.website.com/articles/article_title_stored_in_database/
http://www.website.com/pages/page_title_stored_in_database/

另一个问题:如果我更改了其中包含 $_GET 数据的 URL,更改后是否可以访问它们?所以如果地址是:

http://www.website.com/articles/article_title_stored_in_database/

变量 $_GET['article'] 将返回 'article_title_stored_in_database' ? 谢谢。

【问题讨论】:

相同的 URL 结构不能同时转发到 2 个不同的 PHP 文件 是否意味着文件夹“内容”只能用于articles.php或simple_page.php? 您可以为 2 个不同的 php 文件使用 2 个不同的前缀,/content 不必是一个真正的文件夹。 谢谢。我编辑了问题 我在您编辑后在下面发布了一个答案:) 【参考方案1】:

您可以在 DOCUMENT_ROOT/.htaccess 文件中使用这些规则:

Options -MultiViews
RewriteEngine On

RewriteRule ^articles/([^/]+)/?$ articles.php?article=$1 [L,QSA,NC]

RewriteRule ^pages/([^/]+)/?$ simple_page.php?article=$1 [L,QSA,NC]

【讨论】:

非常感谢。 .htaccess 文件是我理解的外星技术。我希望它工作正常。即使我将 AllowOverride 设置为 All,它也不能在我的 Xampp Apache 服务器上运行。但我相信它会在hostinig上运行良好。再次感谢您的帮助! :) 它没有。我认为这是一个xampp问题。我现在对 xampp 有很多问题,例如,方法 POST 不起作用。如果我用 post 方法发送一些东西,变量(数组)$_POST 是空的,还有许多其他问题。现在我正在寻找不同的程序来使用。 我已经用 XAMPP 进行了测试,它工作正常。确保您的 .htaccess 中只有这两条规则,并且您的系统中没有其他 .htaccess 当我尝试到达 /clanky/nadpis_clanku .. 404 错误 我卸载了 Xampp 并安装了 Wamp。复制的文件和数据库。方法 POST 和你的 RewriteRule 也有效。也许Xampp没有正确安装..无论如何,一切都很好,感谢您的帮助和您对像我这样的新手的耐心。 :)

以上是关于如何使用 .htaccess 重写 URL 而不会影响 $GET 数据的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 重写一个 url,而不是另一个

使用 Symfony 路由从 .htaccess 重写 URL

如何使用 .htaccess 文件重写子目录的 URL?

如何使用 htaccess 重写从 url 中删除此目录/文件夹?

使用 PHP 和 .htaccess 重写 URL

使用php htaccess重写URL?