将具有单个非数字参数的动态 url 重定向到名称由参数值文本组成的静态无扩展根级 url

Posted

技术标签:

【中文标题】将具有单个非数字参数的动态 url 重定向到名称由参数值文本组成的静态无扩展根级 url【英文标题】:Redirect dynamic url with single non-numeric parameter to static extension-less root level url with name consisting of parameter value text 【发布时间】:2021-06-16 07:25:29 【问题描述】:

我有一个.htaccess,它允许我使用.php 不带扩展名的文件网址:

    # if not a directory and .php file is present then add .php extension
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %DOCUMENT_ROOT/$1.php -f
    RewriteRule ^(.+?)/?$ $1.php [L]

我正在尝试创建一个控制器page.php 文件,该文件将允许我根据参数值生成多个动态页面,例如:

https://www.example.com/page.php?pid=some-page-slug-1

https://www.example.com/page.php?pid=some-page-slug-2

等等。

我想用下一种方式把上面的动态链接变成静态的:

https://www.example.com/page.php?pid=some-page-slug-1

转向:

https://www.example.com/some-page-slug-1

我尝试修改在互联网上找到的一些模板,但它不起作用:

RewriteRule (.*)\.php$ page.php?pid=$1

以 SEO 友好的方式将具有单个非数字参数的动态 url 重写为名称由参数值文本组成的静态无扩展根级 url 的正确标记是什么?

【问题讨论】:

RewriteRule (.*)\.php$ page.php?pid=$1 不起作用,因为 example.com/some-page-slug-1 没有使用 .php 完成。 以上重写规则还要不要?用户是否只能通过example.com/some-page-slug-1 之类的静态链接访问您网站的页面?除了 page.php 之外,是否还有其他文件可以对用户产生响应? @AmirMB 是的,只有带有font.php 控制器的动态页面必须遵循新规则,所有现有页面(例如example.com/some-page.php)都应该可以通过无扩展名(example.com/some-page)url 访问他们以前。 【参考方案1】:

你可以试试这些规则:

RewriteEngine On

# if not a directory and .php file is present then add .php extension
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %DOCUMENT_ROOT/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

# singe parameter static URL handlinng
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^([\w-]+)/?$ page.php?pid=$1 [L,QSA]

【讨论】:

谢谢,它适用于带有page.php 控制器的动态页面,但现在所有其他常规静态页面也发送到page.php 控制器......我只需要带有@987654324 的动态页面url 中的@控制器重定向,所有常规静态 url 都像往常一样重定向到相应的静态.php 页面。 Nvm,在你的答案中切换代码块的顺序后,它现在就像一个魅力,你一如既往地令人惊叹,anubhava!

以上是关于将具有单个非数字参数的动态 url 重定向到名称由参数值文本组成的静态无扩展根级 url的主要内容,如果未能解决你的问题,请参考以下文章

重定向用户单击您网站中的链接到非现场 URL

将所有 URL 重定向到 httpd.conf 中的单个页面

Next.js:我们如何将动态路由重定向到静态页面?

将所有 HTTP 和 HTTPS 请求重定向到单个 HTTPS URL

在 Spring MVC 中重定向到动态 URL

在 Spring MVC 中重定向到动态 URL