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

我在将 url 从动态转换为静态时遇到问题。


我有一个网站,其中使用动态 url 生成不同的页面,例如:


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

我想用 htaccess 重写每个的 url 使其成为静态,如下所示:


www.example.com/project-abc123


// or


www.example.com/pr/project-abc123

现在,我发现这个似乎可以工作的 htaccess 代码:


RewriteEngine On

RewriteBase /


RewriteCond %{THE_REQUEST} \?

RewriteCond %{QUERY_STRING} ^p=(.*)$

RewriteRule (.*) http://example.com/%1? [L,R=301] 

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

URL 按指示重写(第一种类型,whitout /pr/),但给了我一个多选错误。我究竟做错了什么?


慕姐4208626
浏览 96回答 1
1回答

萧十郎

让我们了解RewriteRule指令,它是真正的重写主力。ARewriteRule由三个用空格分隔的参数组成。论据是模式:哪些传入的 URL 应该受规则影响;替换:匹配的请求应该发送到哪里;[flags]:影响重写请求的选项。让我们从以下代码段开始:RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{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]// orRewriteRule ^/?pr/(.*)$ index.php/?pr=$1 [L][L] 标志告诉 mod_rewrite 停止处理规则集。这意味着如果规则匹配,则不会处理进一步的规则。
打开App,查看更多内容
随时随地看视频慕课网APP