我之前看过这个问题并且人们提供了答案,但它们似乎都不起作用。 我正在尝试重写URL所以任何请求/ /显示为/。 我不想更改文件的位置,只需要更改URL。 例如,如果有人输入:
Http://www.mysite.com/whatever ( the files are located at /docroot/whatever )
I want the URL to show http://www.mysite.com/
在我的htaccess中(放在/ docroot中,不是/ docroot /等等)我正在使用:
RewriteEngine on
RewriteRule ^whatever/(.+)$ /$1 [L]
正在发生的是URL停留,但服务器正在寻找文件/ docroot。
这与我需要的相反,我需要URL,服务器在/ docroot /中查找文件。
答案 0 :(得分:1)
我认为你倒退了。
http://www.mysite.com/whatever
的外部请求,并希望客户端使用根URI,则需要进行外部(301)重定向。以下几行将为您完成此操作:
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_END} !^1
RewriteRule ^whatever/(.+)$ $1 [R=301,L]
RewriteCond %{REQUEST_URI} !^/whatever
RewriteRule ^(.+)$ whatever/$1 [E=END:1,L]
在第二条规则中,E=END:1
将env变量END设置为1,在内部重定向之后,这变为REDIRECT_END。第一个cond停止,说/ fred - > / whatever / fred - > (301)/ fred - 这会导致浏览器停止。
同样从302s开始,当你有规则工作时切换到301s - 因为客户端浏览器将缓存301s,这使得调试这些规则的错误。
答案 1 :(得分:0)
尝试将其放入文档根目录中的htaccess文件中:
RewriteEngine On
# change the browser's URL address bar
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /whatever($|\ )
RewriteRule ^whatever / [L,R=301]
# internally rewrite / back to whatever
RewriteRule ^$ /whatever [L]