mod_rewrite重定向不存在的URL

时间:2011-09-06 17:10:35

标签: .htaccess mod-rewrite

我有一个旧网站,我已经接管了。新用户基本上可以获得为他们创建的自定义页面。这是以一种不太奇妙的方式完成的。目前,它实际上生成了一个以创建的slug URL命名的文件,并以符号方式将其链接到名为“/ main /”的文件夹。显然我想改变这个。我的计划只是让它通过.htaccess将不存在的文件夹重定向到“/ main /”。目前这是我的.htaccess的样子:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt|index\.htm)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /main/ [L]

然而,这会生成重定向循环。我错过了什么?

修改

就此而言,我意识到我应该说我希望它能够保持输入的路径。例如,如果我放http://www.mydomain.com/test_person它应该保留该地址,但如果有意义的话,将所有内容转发到主文件夹。

1 个答案:

答案 0 :(得分:3)

您希望您的规则不会重写已经以main开头的网址,以便不循环播放,例如:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^main/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^[^/]+/(.*)$ /main/$1 [L]

[L]并不代表你认为[L]在.htaccess文件的上下文中的意思。

您应该能够从REQUEST_URI环境变量中获取所请求的原始URL,但常见的做法是将slug作为GET变量传递给目标。

RewriteRule ^([^/]+)/(.*)$ /main/$2?user=$1 [QSA,L]

或者将所有内容传递给单个脚本,该脚本解释URL并找到要返回的正确内容:

RewriteRule ^([^/]+)/(.*)$ /main/index.php?user=$1&path=$2 [QSA,L]