使用htaccess获取id以及页面名称

时间:2015-06-11 12:53:50

标签: .htaccess mod-rewrite

我目前有一个htaccess文件,我重写 domain.com/index.php?page=home domain.com/home

我的整个htaccess看起来像这样:

RewriteEngine On

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?page=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L,NE]

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

我尝试做的也是从网址获取& id =所以 index.php?page = home& id = 5 将被重写为 /家/ 5

我遇到的另一个问题是我无法打开其他目录中的文件,例如images目录。当我打开图像目录时,我得到了我为该网站设置的404页面,因为它不是一个页面,而是试图将 images / imagefile.jpg 作为页面阅读。

1 个答案:

答案 0 :(得分:0)

只需在第一个条件之前添加:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?page=([^\s&]+)&id=([^\s&]+) [NC]
RewriteRule ^ /%1/%2? [R=301,L,NE]

关于以页面形式打开的图片,情况应该不是这样 - 您的.htaccess条件会阻止这种情况发生。您需要确保您请求的文件存在于images目录中 - 如果不存在,请求将转发到index.php。还要确保没有其他.htaccess文件干扰 - 尽管我怀疑你是这样的。

可能是您正在引用与当前请求相关的图像。因此,例如,如果您有<img src="images/something.png>且当前页面为/services/something,则会尝试请求/services/images/something,这不是您想要的。

要解决此问题,请在img代码(<img src="/images/something.png>)中添加尾部斜杠,或相应地设置base代码(<base href="/">)。