【问题标题】:mod_rewrite to make clean URL with multiple patternsmod_rewrite 使用多种模式制作干净的 URL
【发布时间】:2013-06-26 19:56:00
【问题描述】:

我正在尝试为我的应用程序创建干净的 URL。所以我在 .htaccess 文件中编写了以下代码。

RewriteEngine On
Options +FollowSymLinks

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)/(.*)/?$ index.php?p=$1&id=$2 [NC,L]
RewriteRule ^(.*)/?$ index.php?p=$1 [NC,L]

如您所见,我在查询字符串中最多可能有 2 个变量; pid。如果我在 .htaccess 文件中只有一个规则(具有 1 个变量的规则),一切都会好起来的。但是当我添加第一条规则(带有 2 个变量的规则)时,似乎所有的 css、js 和图像文件都会消失。
我是这样写css、图片、js文件的:

./目录名/文件名

请帮助我创建具有多个规则的干净 URL。

【问题讨论】:

  • 检查您的 CSS/JS 链接。 RewriteConds 应该导致那些不被重写。

标签: php apache mod-rewrite clean-urls


【解决方案1】:

如果您关注Front-Controller Pattern,(即一切都通过index.php),我鼓励您使用FallbackResource

FallbackResource /index.php

它比 mod_rewrite 等价物更简洁和高效(如 anubhava 的 答案所示):

【讨论】:

    【解决方案2】:

    将您的代码更改为:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -l
    RewriteRule ^ - [L]
    
    RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?p=$1&id=$2 [QSA,L]
    
    RewriteRule ^([^/]+)/?$ /index.php?p=$1 [QSA,L]
    

    【讨论】:

    • 我在本地运行应用程序,应用您的代码后,没有页面不显示
    • 抱歉有错字,刚刚改正。立即尝试。
    猜你喜欢
    • 1970-01-01
    • 2012-12-24
    • 2010-12-06
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多