我做了一些研究,并花了最后两天的时间尝试使.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>
另外,我的网址没有任何反应。
答案 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>
项目结构:
现在,如果您请求:localhost/BDsite/tables/energy
,
您将获得服务localhost/BDsite/tables/table.php?table=energy
(通过在table.php文件中通过var_dump-ing $ _GET进行检查)