.htaccess - 配置文件的搜索引擎优化网址

  显示原文与译文双语对照的内容

前言

我正在尝试为配置文件页面写一个 URL 。 所有的应用程序页面都有一个 .html 扩展,所以我试图只匹配字母。数字。-.

所以这些是有效


site.com/steve
site.com/steve-robbins
site.com/steve.robbins

但这些都不是


site.com/steve.html
site.com/steve-robbins.php

假设我有一个检查,以便自定义url在端没有 .html 或者 .php

问题

我正在使用这个,但它不工作


RewriteRule ^([a-zA-Z0-9.-]+)$ profile.php?url=$1 [L]

它应该将 url 设置为 steve,但它将它设置为 profile.php

我做错什么了?


我的完整 .htaccess


Options +FollowSymLinks
RewriteEngine On
RewriteBase/

RewriteCond %{HTTP_HOST} ^[^.]+.[^.]+$
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]

#
# LOGIN
#
RewriteRule ^([a-z0-9]{255})/activate.html$ login.php?activate=$1 [L]
RewriteRule ^logout.html$ login.php?logout [L]

#
# SETTINGS
#
RewriteRule ^change-([a-z]+).html$ account-settings.php?$1 [L]

RewriteRule ^([a-zA-Z0-9.-]+)$ profile.php?url=$1 [L]

# SEO friendly URLs
RewriteRule ^([a-zA-Z0-9-_.]+).html$ $1.php [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}/([a-zA-Z0-9-_.]+).php
RewriteRule ^([a-zA-Z0-9-_.]+).php$ $1.html [R=301]

时间: 原作者:

将这个添加到你的规则( 在 RewriteBase/ 指令下)的顶部:


RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

这应该阻止它循环。 重写引擎将继续应用所有规则,直到( 无查询字符串) 中的URI与规则中的URI相同。 这就是 url的值是 profile.php的原因。

原作者:

如果你已经正确理解了规则,或者添加了条件,或者添加条件不重定向,那么我就可以将它添加到匹配的url中。

尝试向重定向中添加一个前导斜杠,如下所示:


RewriteRule ^([a-zA-Z0-9.-]+)$/profile.php?url=$1 [L]

获取 url 值的原因是因为在文件中,[L] 标志的误导性很好。 它可以按照你所想的那样来做,但是在 .htaccess 文件中它停止读取规则,然后再检查规则直到路径被任何规则修改。 通过添加前导 /,你的规则将不匹配第二次,因为你从 正规表达式 中排除 / 。 我花了点时间和这个的特征 。

...