目前我可以通过两种方式访问特定站点:
1. http://a.com/foo/bar
2. http://a.com/index.php?url=foo/bar
我试图实现的是仅允许使用第一种方法来实现这一点,并在第二种方法上将 301 重定向到第一种方法。以下是我到目前为止编写并放入 .htaccess 的代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
#tricky part
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?url=?(.*)\ HTTP/
RewriteRule ^index\.php$ http://a.com/$1 [R=301,L]
</IfModule>
目前它几乎所有的工作,它将 index.php 重定向到 /,但是将 index.php?url=foo/bar 重定向到 /?url=foo/bar,而我无法使其正确。TIA。
答案1
尝试这个
RewriteCond %{query_string} ^url=(.*)$
RewriteRule ^.*index.php$ /$1? [R=301]