模式重写;网址末尾有/没有斜杠?
Posted
技术标签:
【中文标题】模式重写;网址末尾有/没有斜杠?【英文标题】:Mode Rewrite; with/without trailing slash on end of url? 【发布时间】:2011-07-02 02:48:52 【问题描述】:我基本上在下面尝试了这个 mode_rewrite 规则。它在末尾带有斜杠,但我希望它能够在末尾带有斜杠。基本上我希望它像这样,因为有些人认为它是正常的,末尾有一个斜线,而另一些人则不认为它因此无论它是否存在我都希望它工作。
RewriteRule ^signup/register(.[^/]*) /signup/register.php [NC]
基本上它会像 http://localhost/signup/register/
一样工作,但如果我从末尾删除 / 则会出现 404 错误。
【问题讨论】:
【参考方案1】:...
RewriteRule ^(url-rewrite)/?$ page.php [NC]
...
? after / 指定在你的url-rewrite之后可以没有或有一个/,因此它会接受它有或没有尾随/
【讨论】:
【参考方案2】:普通的旧正则表达式:
RewriteRule ^signup/register/?$ /signup/register.php [NC]
【讨论】:
【参考方案3】:子模式.[^/]*
至少需要一个任意字符。在你的情况下,它可能是那个斜线。
你最好坚持一种书写方式(无论是否带有斜杠)并将错误的书写重定向到正确的位置,例如:
# remove trailing slash
RewriteRule ^(.*)/$ /$1 [L,R=301]
# add trailing slash
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^.*[^/]$ /$0/ [L,R=301]
【讨论】:
嗨 Gumbo,我这样做是为了删除尾部斜杠,但这不会对服务器造成更大的压力,因为它必须删除尾部斜杠? @PHPLOVER:您应该首先提供正确的 URL。这些规则仅用于修复那些拼写错误的 URL。 好的,谢谢,我明白你的意思了,所以基本上将我的网址更改为站点中新的友好网址,不带斜杠,并且 apache 唯一需要删除 / 是如果有人明显包含它。谢谢,我现在明白了。 对不起,我也是想问的;我应该在 .htaccess 中设置永久重定向到友好的网址吗?为什么我的网站在 Google 中只使用 signup/register.php 并且不确定我是否应该进行永久重定向?我知道该怎么做,但我想我会问。谢谢 @PHPLOVER:是的,您应该已经提供了包含“新”URL 的文档。以上是关于模式重写;网址末尾有/没有斜杠?的主要内容,如果未能解决你的问题,请参考以下文章