1

可能重复:
htaccess rewrite 破坏了相对路径

我希望有人能帮助我。我正在尝试将我的网站设置为使用漂亮的 URL。

我目前有一些 htaccess 命令可以隐藏包含我所有 php 文件的子域文件夹以及将我的协议从 http 更改为 https 的命令,反之亦然。漂亮的网址被证明是困难的。我只想通过 htaccess 而不是 php 来完成。我设法编写了一个有效的命令,但在那之后我的 css 或 javascript 都不起作用。

# Redirect from website.com to www.website.com
RewriteCond %{HTTP_HOST} ^website.com [NC]
RewriteCond %{HTTP_HOST} !^www [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# redirect url to www
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /defaultfolder/([^\ ]+)\ HTTP/
RewriteRule ^(.*)$ defaultfolder/error.php [L]

#this section hides the defaultfolder, tried to modify this code here to make friendly urls.
RewriteCond %{HTTP_HOST} www.website.com
RewriteCond %{REQUEST_URI} !defaultfolder/
RewriteCond %{REQUEST_URI} !images/
RewriteRule ^(.*)\/$ defaultfolder/$1\.php [L]

#https redirect
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} (/defaultfolder/)(login|securepages|pages)\.php
RewriteRule ^defaultfolder/(.*)$ https://www.website.com/$1 [R,L]

#http redirect
RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_URI} (/defaultfolder/)(index|nonsecure pages)\.php
RewriteRule  ^defaultfolder/(.*)$ http://www.website.com/$1 [R,L]
4

1 回答 1

1

在那之后,我的 css 或 javascript 都没有工作。

这可能是一个相对/绝对路径问题。当您更改 URL 的路径时,相对链接将会中断,因为基础已更改。您可以添加一些规则来将 css/js 请求指向正确的位置,或者尝试使用<base>页面标题中的标签添加正确的基础。就像是:

<base href="/">

否则你可能不得不重写 css 和 js 的解析方式。例如,你有你所有的样式/css/和你的所有脚本/js/

RewriteCond %{REQUEST_URI} !^/css/
RewriteRule ^(.*\.css)$ /css/$1 [L]

RewriteCond %{REQUEST_URI} !^/js/
RewriteRule ^(.*\.js)$ /js/$1 [L]

<head><link rel="stylesheet" type="text/css" href="css/main.css" media="all"/>

这是在主子文件夹中

所以这意味着你需要这样的规则:

RewriteCond %{REQUEST_URI} !/defaultfolder/
RewriteRule ^(css|js)/(.*)\.(css|js)$ defaultfolder/%1/%2.%3 [L]
于 2012-08-31T16:19:43.273 回答