RewriteRule无法使用给定参数

时间:2019-07-02 18:30:49

标签: php .htaccess url

我做了一些研究,并花了最后两天的时间尝试使.htaccess正常工作,但我无法完全理解.htaccess的工作原理。

这是我要重写的URL,在我的.php文件中使用GET:

http://localhost/BDsite/tables/table.php?table=Energy

我希望它像这样:

http://localhost/BDsite/tables/Energy

好吧,这就是我的.htaccess的写法,它位于站点文件夹中,它是 / BDsite

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^BDsite/tables/([^/]*)$ /BDsite/tables/table.php?table=$1 [L]
</IfModule>

另外,我的网址没有任何反应。

1 个答案:

答案 0 :(得分:1)

与按服务器重写不同,可以在部分或.htaccess文件中进行重写,但要付出一些额外的复杂性。这种技术称为按目录重写。

每服务器重写的主要区别在于,包含.htaccess文件的目录的路径前缀在RewriteRule中匹配之前先被剥离

应使用 RewriteBase 来确保正确映射请求。

(来源:apache.org - rewrite intro .htaccess files

因此,使用您的目录结构,并添加必要的RewriteBase,您将获得以下应能运行的功能:

.htaccess根文件夹(BDsite)中的文件

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On

RewriteBase /BDsite/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^tables/([^/]*)$ tables/table.php?table=$1 [L]
</IfModule>

项目结构:

enter image description here

现在,如果您请求:localhost/BDsite/tables/energy

您将获得服务localhost/BDsite/tables/table.php?table=energy (通过在table.php文件中通过var_dump-ing $ _GET进行检查)