2013-08-30 132 views
0

我一直在网上搜索整整2个小时,尝试不同的事情,而我发现的任何内容都无法工作。PHP APACHE URL重写

我想重定向到一个不存在的文件夹,然后将其转换为一个查询字符串 - 例如一个导致“domain.com/test/”的锚标签但是.htaccess应该拦截并更改为“domain.com/index.php?p=test”窗口后面没有观看者看到查询字符串

我不知道我在做什么错,但我已经尝试了几乎所有的东西在谷歌上 - 第1页至少两个:P

任何帮助,非常感谢。

+0

可能重复的[PHP的Apache网址重写](http://stackoverflow.com/questions/1750884/php-apache-url-rewrite) – bizzehdee

回答

1

mod_rewrite有属性测试,允许您测试请求的url是文件还是目录。请参阅the documentation。请使用RewriteCond来测试%{REQUEST_FILENAME}。然后,您可以重定向或内部重写网址。重定向将显着改变客户端的网址,而内部重定向只会显示不同的网页,而不会实际更改网址。

#The requested url is NOT a directory AND NOT a file 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?p=$1 [L] 

如果您想要发生外部重定向,请添加R -flag。 R=301标志将使重定向成为永久性的,但只有在所有规则都按照您期望的那样工作的情况下才能使其永久生效。

+0

好吧,我已经试过这个,我可以去/测试/ P /主页和所有相关的链接都被打破,以及SQL功能 - 所以我不知道我喜欢这个正确的... PS。 /测试是我的域根目录中的文件夹 要在URL中显示此“http:// localhost:8888/Test/Home”,但php应将其解释为http:// localhost:8888/Test /?p =主页 –

+0

尝试使用'RewriteBase/Test /'。 mod_rewrite不会更改页面上的链接,因此如果相关链接被破坏,则必须更改其他内容。 – Sumurai8

+0

好吧那么它的工作原理我只是不得不使用/ p/Home,因为我正在尝试... 有没有一种方法来检测它的用途?所以例如。 ?p = Home会去/ Home并且/ refresh = 213124123会去/ refresh/213124123?或者类似的东西 - 基本上检测哪个查询字符串被调用:) –