0

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

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 包括等上它都失败了。当我想输入完整地址时是否明智?使用虚荣网址?

4

1 回答 1

1

首先确保您在 CSS、JS 和图像文件中使用绝对路径。这意味着这些资源的路径应该以斜杠/http://. 如果您还没有它,请进行必要的代码更改。完成后使用以下 .htaccess in $DOCUMENT_ROOT( not in$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]
于 2012-06-02T14:35:37.523 回答