我的最终目标是拥有这样的东西。
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包括等。只要把完整的地址放在我想要的时候是明智的使用虚荣网址?
答案 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]