所以我想重写一个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。
答案 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} !-d
和RewriteCond %{REQUEST_FILENAME} !-f
将阻止第一次重写规则应用于真实文件和目录。