htaccess 重写 URL 以仅删除一个 php 文件的 $_GET 查询[重复]
Posted
技术标签:
【中文标题】htaccess 重写 URL 以仅删除一个 php 文件的 $_GET 查询[重复]【英文标题】:htaccess Rewrite URL to remove $_GET query for only one php file [duplicate] 【发布时间】: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生成器 【参考方案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 ]' 以便我可以再次将其用于其他页面? 您能否再次通读这个问题,因为我已经重写它以使其更有意义。 我在答案中添加了一些细节。让我知道重写规则是否对您有用,如果没有,我可以尝试改进它。以上是关于htaccess 重写 URL 以仅删除一个 php 文件的 $_GET 查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 htaccess 重写从 url 中删除此目录/文件夹?