模式重写;网址末尾有/没有斜杠?

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 的文档。

以上是关于模式重写;网址末尾有/没有斜杠?的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 重写以在末尾强制使用斜杠

URL重写在末尾添加斜杠会破坏我的css链接

在.htaccess中将ID重写为斜杠

htaccess mod 用斜杠将 $_GET 重写为变量

在每个网址的末尾添加一个斜杠?

Codeigniter重写URL用斜杠替换问号