【问题标题】:mod_rewrite changing /subpage/ to /subpagemod_rewrite 将 /subpage/ 更改为 /subpage
【发布时间】:2010-12-02 00:14:49
【问题描述】:

好吧,这是我的问题。 我想使用 mod_rewrite 为我的网站制作漂亮的 url。

我希望他们都有好看的网址,例如 www.mypage/tennis 或 www.mypage/soccer 而不是 www.mypage/?page=tennis 和 www.mypage/?page=soccer

通过以下规则,我可以做到这一点:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule .* index.php [L]

所以现在如果我输入 www.mypage/soccer 我的 PHP 脚本会读取这个 url 并将其转换为 $_GET['page'] = football 是不是很神奇。这一切都很好!

问题是,如果我突然键入 URL www.mypage/soccer/,网站无法找到每个链接的 css 或图像,因为它现在在不存在的文件夹中查找/soccer/

如何制定将 /soccer/ 转换为 /soccer 或任何其他 /blabla/ 为 /blabla

的重写规则

希望我的问题很清楚!另外,如果有人有任何好的页面可以让我学习更多正则表达式,我会非常高兴!

【问题讨论】:

标签: php regex mod-rewrite


【解决方案1】:

试试这个:

RewriteRule ^([A-Za-z0-9-]+)/?$ ?page=$1 [L]

【讨论】:

  • 泰!那行得通……仍然不能真正回答我的核心问题;是否可以删除任何网址上的结尾 / ?
  • 这仅在我使用绝对路径或为我的网站设置基础时才有效。有没有这样的方法?
【解决方案2】:

我认为你不应该为此使用 mod_rewrite,而应该修复你的 CSS 和图像路径。

relative to absolute更改路径, 也就是说,路径应该以/ 开头。

如果你有这个,无论你在哪个网站,/images/myimage.png 将始终引用www.mypage.com/images/myimage.png

【讨论】:

  • 当然这是一种解决方案。但是,假设我仍然想保留我的相对路径,必须有一种方法可以将任何 /sub/ 重写为 /sub,即使没有绝对路径也可以。
  • 还有一个解决方案是添加; mypage.com"> 我们已经为网站中的所有链接设置了基础。但我想用 mod_rewrite 来做:D
  • @jamietelin: 啊真的...不错 :) 但是如果解决方案可以这么简单,为什么还要添加不必要的服务器端处理?
  • 因为知识为王 :) 我只是想知道。它还与可移植编码有关。
【解决方案3】:
#  For URIs with query string:

RewriteCond %{QUERY_STRING} (.+)
RewriteRule (.*)/$ ?page=$1&%1 [L]

#  All other

RewriteRule (.*)/$ ?page=$1 [L]

【讨论】:

  • 这与 Brian H 写的有什么不同? (对不起,我不太擅长 mod_rewrite 或 regex)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 2019-05-09
  • 2019-07-19
  • 2019-06-30
  • 2012-11-23
  • 2012-06-13
相关资源
最近更新 更多