【问题标题】:Pretty URL for .html with parameters带有参数的 .html 的漂亮 URL
【发布时间】:2016-02-17 21:41:23
【问题描述】:

我有一个仅由 .html 前端组成的网站,我希望有漂亮的 URL。我的目标是创造这样的东西

http://test.com/mypage.html  => http://test.com/mypage
http://test.com/mypage1.html => http://test.com/mypage1

对于一个特定的页面

http://test.com/my-prettlink.html?id=1 => http://test.com/my-prettlink/1

我尝试了位于项目根目录中的 .htaccess,但仅删除 .html 有效。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^my-prettylink/(\d+)*$ ./my-prettylink.html?id=$1

【问题讨论】:

  • 永远不会到达最后的重写路径。它必须放在第一位,因为它更专业。更一般的规则更接近尾声。

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


【解决方案1】:

更具体的规则应该在一般规则之前。所以,试试:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /subdirectory/

RewriteCond %{THE_REQUEST} ^GET\ /(subdirectory/my-prettylink)\.html\?id=(\d+) [NC]
RewriteRule ^my-prettylink\.html$ /%1/%2? [R=301,L]

RewriteCond %{THE_REQUEST} ^GET\ /(subdirectory/.+)\.html [NC]
RewriteRule ^ /%1? [R=301,L]

RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^my-prettylink/(\d+)$ my-prettylink.html?id=$1 [L]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(?!js|css) %{REQUEST_URI}.html [L]

并在标题中添加<base href='/subdirectory/' />

【讨论】:

  • 当我点击 my-prettylink?id=1 链接没有改变(但页面有效)并且 my-prettylink/1 也抛出了我 not found。当我删除 /my-prettylink.html?id=$1 [L] 前面的斜线时也找不到
  • @JozefDúc 文件在哪里?你把重写规则放在哪里?您是否也希望将丑陋的 URL 重定向到漂亮的 URL?
  • 文件与.htaccess 文件位于同一目录中。我只想将带有查询字符串的一页重定向到漂亮的 URL(正如我在问题中所写的那样),并且还从所有 URL 中删除 .html 扩展名
  • @JozefDúc 所有文件都在服务器根目录下?或者在某个子目录中。我会相应地更新回复。
  • 整个页面位于子目录中
猜你喜欢
  • 2017-04-16
  • 2015-01-15
  • 1970-01-01
  • 2014-09-24
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多