htaccess问题,有例子

时间:2012-06-02 13:37:18

标签: php .htaccess

我的最终目标是拥有这样的东西。

127.0.0.1/site/search/search-term

而不是

127.0.0.1/site/search.php?term =

我尝试了两段代码,首先是。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ../search.php?term=$1

我把它放在名为/ search的文件夹中。 HTACCESS工作得很好但是css对我的网站搞砸了,它只是将所有内容都显示为纯文本而没有任何样式。

其次我试过

RewriteEngine On
RewriteBase /search/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ../search.php?term=$1

并将其放在127.0.0.1/site/ root中。但是当我尝试127.0.0.1/site/search/searchterm时,我得到了404。

谁能看到我哪里出错了?我猜第一个选项是最好的选择,因为它是如此接近,我通过使用虚拟网址后我收到的页面的来源,我认为这可能是如何联系我样式表?它可以工作,如果我把完整的地址放入链接(127.0.0.1/site/main.css)但是然后所有它都失败了我所有的jquery包括等。只要把完整的地址放在我想要的时候是明智的使用虚荣网址?

1 个答案:

答案 0 :(得分:1)

首先确保您在CSS,JS和图像文件中使用绝对路径。这意味着这些资源的路径应该以斜杠/http://开头。如果您还没有,请进行必要的代码更改。完成后,请在$DOCUMENT_ROOT中使用以下.htaccess(不在$DOCUMENT_ROOT/site 中):

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^site/search/(.+)/?$ site/search.php?term=$1 [L,QSA,NC]

编辑:根据您的评论,这里是以小写形式生成URI的代码:

首先在httpd.conf文件末尾的OR部分添加此行:

RewriteMap lc int:tolower

然后你有这样的规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^site/search/(.+)/?$ site/search.php?term=${lc:$1] [L,QSA,NC]