如何使URL mod重定向(.htaccess)更加简单?

时间:2013-11-30 18:04:30

标签: php apache .htaccess mod-rewrite redirect

我有以下重定向,部分工作正常,但不是非常万无一失。

网址(工作):

example.com/test123
example.com/test123/hello

.htaccess 我有:

RewriteRule ^(\w+)/?$ /index.php?id=$1 [L,QSA]
RewriteRule ^(\w+)/(\w+)/?$ /index.php?id=$1&mode=$2 [L,QSA]

虽然它可以正常工作,但是当用户输入“example.com/test123”时,而不是“example.com/test123/”。出于某种原因,将“/”放在URL的末尾会使页面变为404.

上述(.htaccess)重定向条目的以下网址(无效)(因为最后的“/”):

example.com/test123/
example.com/test123/hello/

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

正如@anubhava观察到的那样,

即使您遇到网址404错误,您的规则也适用于我。因此,请通过添加一行来禁用MultiViews进行测试:

Options -MultiViews

RewriteEngine On

RewriteRule ^(\w+)/?$ /index.php?id=$1 [L,QSA]
RewriteRule ^(\w+)/(\w+)/?$ /index.php?id=$1&mode=$2 [L,QSA]

在此期间,要重写http://www.example.com/test123/hello/

你应该对HTML文档进行重新编程,这是一个痛苦的变化:所有资源文件都必须在绝对路径中使用,如* .css,*。js,* .png,......并且不得重写它们。在这种情况下,style.css将不匹配RewriteRules,所以保持不变 - 我们运气好!

<link rel="stylesheet" type="text/css" href="/mystyles/style.css" />

而不是相对路径:

<link rel="stylesheet" type="text/css" href="mystyles/style.css" />

* .js,* .png,...

需要进行相同的更改

答案 1 :(得分:0)

可以假设从不需要尾随斜杠。如果是这种情况,您可以添加重写规则以删除尾部斜杠,使重定向始终有效。

RewriteRule ^(.*)/$ $1 [R=301,L]

确保重写发生之前重定向!