【问题标题】:htaccess and pretty linkshtaccess 和漂亮的链接
【发布时间】:2017-10-27 11:23:10
【问题描述】:

我正在尝试写一个简单的博客,它运行良好,直到我得到漂亮的链接。

我想做的是使用像 mysite.com/blog/this_post 这样的 URL 并将其作为 url 参数传递到 index.html 文件中,以便 index.html?blog=this_post

到处搜索,发现一堆 htaccess 代码,但大多数都不起作用。我确实找到了一种尝试工作但由于某种原因没有正确执行的解决方案。 (有和没有 Options +FollowSymLinks 部分)

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^blog/(.*) /blog/index.html?blog=$1

当我使用它时,我在 url 中得到 /blog/index.html?blog=index.html 而不是保留 /blog/this_post 并将其移植到 index.html 中。服务器上的某些内容可能设置不正确吗?博客的其他所有内容都像魅力一样工作,但脚本没有任何问题,它只是让漂亮的链接正常工作。

查看了具有 wordpress 并复制了该 htaccess 代码的旧网站,但它做同样的事情。此处和其他站点上的所有其他搜索都指向上述相同的解决方案或 wordpress,但由于某种原因,它将 index.html 传递给脚本,而不是预期的最后一个 url 段“this_post”。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.html [L]
</IfModule>
# END WordPress

应该发生的是用户输入

mysite.com/blog/this_post

地址栏中的哪个正确?但是 htaccess 文件会提取 this_post 并将其作为参数传递给 index.html 脚本。这就是上面的例子应该做的。为什么将地址栏更改为

mysite.com/blog/index.html?blog=index.html 

我不知道为什么

旁注,因为我之前得到过这个...是的,我知道使用 .php 扩展名,但 .html 是客户要求他们不让步。

编辑可能重复的链接是我已经找到并尝试获取当前 RewriteRule 的链接,但它仍然无法正常工作。

【问题讨论】:

标签: php apache .htaccess


【解决方案1】:

最好的方法是像这样简单:

Options +FollowSymLinks
RewriteEngine On

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

Options -MultiViews
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

然后你可以像这样做 URL:

mysite.com/this_post

等于:

mysite.com/index.php?blog=this_post

这样你就可以同时拨打电话,并且工作正常。

一般来说,您首先需要确定您希望 SEO URL 的外观,然后您需要设置 .htaccess 正则表达式和规则。

注意:您不能使用 .html 进行 GET 调用。您可以将.php 文件用于您的作品,并使用$_GET['blog'] 从URL 中提取您的数据。

【讨论】:

  • GET 对 .html 文件有效,除了漂亮的链接之外,一切正常。我尝试了此解决方案并收到 404 错误
  • @VikingNM 如果您将此 RewriteRule ^([^\.]+)$ $1.htm [NC,L] 更改为 RewriteRule ^([^\.]+)$ $1.html [NC ,L] 行得通吗?我认为错过了“html”的“l”。
  • 嗯...很难说这样。请在上面提供您的 PHP 代码(更新您的问题),提供当前的 htaccess 并查看。一个错误:-您是在实时域还是本地主机上工作,您是在根目录下工作还是在某个文件夹中工作?请提供URL地址的原始格式
【解决方案2】:

似乎找到了有效的组合,[NC,L] 标志组合不断给我一个崩溃错误,所以我只留下了 [NC]。将它放在根帐户目录中似乎也不起作用,所以我进入了 web 目录(public_html),现在可以了。

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog/(.*) /blog/index.html?blog=$1 [NC]

仍然不确定为什么 L 标志让我在页面上出现服务器崩溃,或者为什么将它放在根目录中不起作用但将它移到 public_html 文件夹中,这可能是我的服务器配置问题俯瞰?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2013-01-10
    相关资源
    最近更新 更多