【问题标题】:.htaccess URL rewrite directory.htaccess URL 重写目录
【发布时间】:2014-07-10 19:22:06
【问题描述】:

所以我想重写一个 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 没有变化。

【问题讨论】:

    标签: .htaccess url mod-rewrite


    【解决方案1】:

    目录确实没有改变,但浏览器不知道——它得到的看起来像一个目录,比如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]
    

    【讨论】:

    • 我必须在我的服务器中创建“m”文件夹吗?
    • 不,如果您使用绝对路径,它将查看您服务器的根目录 - 例如,真正的 css 文件夹所在的位置。
    • 好的,我的代码写得对吗?因为由于某种原因,当我尝试访问重写后的 URL 时,它会将我重定向到原始 URL...
    • 是的,我刚刚试了一下,效果很好,没有任何变化。
    • @user3674778 在这里,检查一下:dl.dropboxusercontent.com/u/64454818/TMP/www.zip
    【解决方案2】:

    有这样的规则:

    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 将阻止首次重写规则应用于真实文件和目录。

    【讨论】:

    • 工作,很好,但我必须执行“m.php?i=$1”,因为尚未删除扩展程序,对吗?
    猜你喜欢
    • 2011-04-17
    • 2010-10-26
    • 1970-01-01
    • 2023-03-20
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多