【问题标题】:Rewrite Pretty or SEO friendly URL via htaccess通过 htaccess 重写漂亮或 SEO 友好的 URL
【发布时间】:2020-06-09 09:33:43
【问题描述】:

我在将 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/),但给了我一个 multiple selection 错误。我做错了什么?

【问题讨论】:

  • 这能回答你的问题吗? URL rewriting with PHP
  • "multiple choice" error - ?大概您已经更改了应用程序中的 URL?
  • 这没什么。其他主题中的方法不起作用。消息是:'300 多项选择。在此服务器上找不到您请求的文档名称 (/.php)。但是,我们发现文件名称与您要求的文件相似。'

标签: php .htaccess mod-rewrite url-rewriting


【解决方案1】:

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

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

  • 模式:哪些传入 URL 应受规则影响;
  • 替换:匹配的请求应该发送到哪里;
  • [flags]:影响重写请求的选项。

让我们从下面的sn-p开始:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

第一行代码,描述RewriteEngine被打开。这里我使用RewriteCond 指令,它定义了一个重写规则条件。使用RewriteCond 指令,我们在这里定义了两个条件。该指令采用名为REQUEST_FILENAME 的服务器变量。以上两个条件判断请求是不是文件还是目录,则满足RewriteRule设置的规则。有关此问题,请参阅 more details

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

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 停止处理规则集。这意味着如果规则匹配,则不会处理更多规则。

【讨论】:

  • 好吧,我的结果很好。你检查你的 mod_rewrite 是否启用?你用的是哪个版本的apache?你的MultiViews 启用了吗?如果是这样,请像 Options -MultiViews 一样禁用它。
  • 我做到了。谢谢。问题是与这些冲突的 htaccess 指令。 “多视图”很重要吗?
  • 是的,此时内容协商很重要。看看这个答案stackoverflow.com/a/25423722/7935051
猜你喜欢
  • 1970-01-01
  • 2021-07-06
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多