如何在添加尾部斜杠(.htaccess / mod_rewrite)后重写URL?

时间:2012-05-11 17:13:46

标签: apache .htaccess mod-rewrite

我不太习惯使用htaccess文件,所以我在这个问题上挣扎了一段时间:

我想知道如何在添加尾部斜杠(301重定向)后将URL(example.com/foo/bar)重写为(example.com/index.php?q=/foo/bar)到初始网址:

我知道如何单独添加尾部斜杠:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://exemple.com/$1/ [L,R=301]

如何重写为index.php:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L]

但我无法想象如何同时做两件事......

非常欢迎任何帮助!

Pierre Fraisse

2 个答案:

答案 0 :(得分:2)

在你的.htaccess中尝试这个(我尽可能地测试了它):

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]

RewriteCond %{REQUEST_URI} [^/]$
RewriteRule ^(.*)$ $1/ [L,R=301]

RewriteRule ^(.*)$ index.php?q=$1 [L]

答案 1 :(得分:0)

你有一个接受的答案,但我仍然想回答这个问题,因为实际答案是更简单,通过多个(和慢)重定向运行它,就像在另一个答案中一样。

将此代码放在.htaccess目录下的DOCUMENT_ROOT

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php?q=%{REQUEST_URI} [L]