PHP查询字符串用htaccess RewriteCond重写

时间:2015-02-19 11:51:57

标签: php apache .htaccess mod-rewrite

switchindex.php?action=

我想在rewriteindex.php/

之后index.php?action=发送任何内容

目前我有删除index.php

的规则

RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC] RewriteRule ^(.+?)/?$ /$1.php [L]

所以当前的网址看起来像;

localhost:8888/?action=viewBasket

并希望将其改写为;

localhost:8888/viewBasket

我很困惑,我需要为每个开关参数创建一个条件,以防止图像,脚本,源等被重写。或者,如果有条件检查是否存在先出现。干杯!

3 个答案:

答案 0 :(得分:1)

我已经解决了。如果没有人提供更好的解决方案,明天会删除我的问题。

# redirect to any directories
RewriteRule ^styles/(.*) styles/$1 [L,QSA]
RewriteRule ^styles/fonts/(.*) styles/fonts/$1 [L,QSA]
RewriteRule ^images/(.*) images/$1 [L,QSA]
RewriteRule ^bower_components/(.*) bower_components/$1 [L,QSA]
RewriteRule ^scripts/(.*) scripts/$1 [L,QSA]

#if not a directory listed above, rewrite the request to ?action=
RewriteRule ^(.*)$ index.php?action=$1 [L,QSA]

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

试试这个:

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

第一行:添加了这个,因为我在摸不着为什么它不适合我。我确定你知道你需要这个,只是给那些可能会看到这个的人留言。

第二行:检查它是否不是文件。

第三行:检查它是否不是目录。如果它是文件或目录,则不会处理您的RewriteRule。默认情况下RewriteCond用和操作。

第四行:我确定有人可以写出更好的规则。 [L]最后一​​条规则,停止评估RewriteRules。告诉它重写为index.php?action = {whatever}而不更改位置标题。

第四行的要点是:如果你的index.php是

var_dump($_GET);

www.example.com/foo

将产生array(1) { ["action"]=> string(3) "foo" }