【问题标题】:apache - rewrite dynamic url into static url on addon domain is not workingapache - 将动态 url 重写为插件域上的静态 url 不起作用
【发布时间】:2016-10-13 08:13:43
【问题描述】:

我正在研究我的网站的 seo,在阅读了一些关于 seo 友好 url 的文章后,我决定将所有动态 url 更改为静态 url。 例如:大多数网址都像www.abc.com/final.php?id=1&name=name-of-file,但我想将网址更改为静态网址,如www.a.com/name-of-file/1

我尝试编辑 .htaccess 文件,但它不起作用。

我的.htaccess file

Options +FollowSymLinks
RewriteEngine on
RewriteRule final/id/(.*)/name/(.*)/ final.php?id=$1&name=$2

【问题讨论】:

  • 一般注意事项:如果可能,您应该始终将此类规则放在 http 服务器主机配置中,而不是使用 .htaccess 样式文件。众所周知,这些文件容易出错,难以调试,而且它们确实会降低 http 服务器的速度。它们只是为那些没有访问主机配置的人提供的最后手段(阅读:非常便宜的托管服务提供商)。

标签: php apache .htaccess


【解决方案1】:

这样试试吧,

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/([\d]+)$ final.php?id=$2&name=$1 [QSA,NC,L]

【讨论】:

  • 什么是错误请评论/删除其他冲突规则然后尝试。
  • 没有报错,但是不会把url改成静态的
  • 根据此规则,当您在内部调用www.abc.com/name-of-file/1 时,它将重写为www.abc.com/final.php?id=1&name=name-of-file,您确定您正在这样做。重定向和重写是不同的东西。
  • 哦,现在我明白了,我也想将 www.abc.com/final.php?id=1&name=name-of-file 重定向到 www.abc.com/id/1/name/name-of-file 实际上我假设重写和重定向是相同的,谢谢你纠正我
【解决方案2】:

你可以使用:

Options +FollowSymLinks
RewriteEngine on

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} \s/+final\.php\?id=([^\s&]*)&name=([^\s&]*) [NC]
RewriteRule ^ /%2/%1/? [R=301,L,NE]

# internal forward from pretty URL to actual one
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(\d+)/? final.php?id=$2&name=$1 [NC,L,QSA]

【讨论】:

  • 它的工作,但我的 css 在那个页面上不起作用,我认为这一切都是因为 $_GET 变量
  • 对css使用绝对链接,或者在html头中添加:<base href="/">。因为您更改了 URL 和相对根目录。
  • 我怎样才能附加上一页的网址,假设我在搜索页面上有带有 url www.abc.com/x/y/query='dfg' 的结果,当我点击任何一个结果时,它应该打开 www.abc.com/x/y/name-of-file/id-num 而不是 www.abc.com/name-of-file/id-num
  • 我不明白这个问题。我对你原来的问题的回答。对于另一个问题,添加一个新问题
  • 如果要更改 HTML 页面中的链接,则必须更改 html 或程序。
猜你喜欢
  • 2013-01-05
  • 2012-01-07
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多