我有一个名为 dollar 的目录,其中包含一个文件 index.php 。我想将网址 http://localhost/dollars/foo 转换为 dollar / index.php?dollar = foo 。这是我目前在美元 directorty中的.htaccess文件:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !^index\.php
RewriteRule ^(.+)$ index.php?dollars=$1 [L]
除了对 index.php 的请求之外的任何请求都应该使用RewriteRule。
然而,这不起作用。
我一直在寻找如何创建我想要的重定向,但我甚至不知道我是否在正确的轨道上。正则表达式从来都不是我的事。谢谢你的帮助!
答案 0 :(得分:3)
经常使用的重写解决方案是检查所请求的路径是否指向实际的文件/目录,如果没有则重写它 - 因为重写的URL将指向实际的文件,没有发生循环。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
答案 1 :(得分:1)
Amber的答案应该让事情适合你,但我想解决你的具体情况出了什么问题。你有正确的想法,但%{REQUEST_FILENAME}
实际上最终成为一个完全限定的路径,所以你的正则表达式应该在结尾检查index.php
,而不是开头。
因此,你会发现这会更像你期望的那样:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !index\.php$
RewriteRule ^(.+)$ index.php?dollars=$1
如果您在该目录中添加了其他内容,那么将Amber所提到的那些RewriteCond
换掉就不会有问题了,所以我建议不要使用它代替这个。