为了账号安全,请及时绑定邮箱和手机立即绑定

通过 htaccess 重写漂亮或 SEO 友好的 URL

通过 htaccess 重写漂亮或 SEO 友好的 URL

PHP
慕姐4208626 2022-10-09 16:46:53
我在将 url 从动态转换为静态时遇到问题。我有一个网站,其中使用动态 url 生成不同的页面,例如:www.example.com/?pr=project-abc123我想用 htaccess 重写每个的 url 使其成为静态,如下所示:www.example.com/project-abc123// orwww.example.com/pr/project-abc123现在,我发现这个似乎可以工作的 htaccess 代码:RewriteEngine OnRewriteBase /RewriteCond %{THE_REQUEST} \?RewriteCond %{QUERY_STRING} ^p=(.*)$RewriteRule (.*) http://example.com/%1? [L,R=301] RewriteRule ^(.*)$ /index/?pr=$1[L]URL 按指示重写(第一种类型,whitout /pr/),但给了我一个多选错误。我究竟做错了什么?
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

让我们了解RewriteRule指令,它是真正的重写主力。

ARewriteRule由三个用空格分隔的参数组成。论据是

  • 模式:哪些传入的 URL 应该受规则影响;

  • 替换:匹配的请求应该发送到哪里;

  • [flags]:影响重写请求的选项。

让我们从以下代码段开始:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

第一行代码,描述RewriteEngine是打开的。在这里,我使用RewriteCond定义重写规则条件的指令。使用RewriteCond指令我们在这里定义了两个条件。该指令采用了一个名为REQUEST_FILENAME. 上面的两个条件判断请求是不是文件还是目录,则满足RewriteRule. 查看有关此问题的 更多详细信息。

现在是时候编写一些重写规则了。让我们转换

www.example.com/?pr=project-abc123


// to 


www.example.com/project-abc123

重写规则将是:


RewriteRule ^(.*)$ index.php/?pr=$1 [L]

为了得到www.example.com/pr/project-abc123我们需要如下规则:


RewriteRule ^/?([a-z]+)/(.*)$ index.php/?$1=$2 [L]


// or


RewriteRule ^/?pr/(.*)$ index.php/?pr=$1 [L]

[L] 标志告诉 mod_rewrite 停止处理规则集。这意味着如果规则匹配,则不会处理进一步的规则。


查看完整回答
反对 回复 2022-10-09
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信