.htaccess URL重写目录

时间:2014-07-10 19:22:06

标签: .htaccess url mod-rewrite

所以我想重写一个URL。默认网址为http://example.com/m.php?i=random_string

这是规则

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]
RewriteRule ^m/([^/]+)/?$ m?i=$1 [L]

但是,当我访问http://example.com/m/random_string时,页面会出现但我的外部css和js文件无法加载。为什么会这样?我认为该目录不会改变原来的重写URL。

2 个答案:

答案 0 :(得分:0)

目录确实没有改变,但是浏览器不知道 - 它看起来像一个目录,例如m/something,所以它试图加载相对于这个目录的CSS文件。

要解决这个问题,请在页面中使用CSS和JS的绝对路径,即:

/css/style.css

(初始正斜杠使其绝对)


RewriteEngine On

RewriteRule ^m/([^/]+)/?$ m.php?i=$1 [L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)(\?.*|)?$ %{REQUEST_FILENAME}.php$2 [QSA,L]

答案 1 :(得分:0)

你的规则如下:

RewriteEngine On

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

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-f将阻止第一次重写规则应用于真实文件和目录。