将mod_rewrite规则从conf.d移动到.htaccess

时间:2011-07-13 02:32:13

标签: php apache mod-rewrite

在从conf.d文件夹中移动mod_rewrite规则后,我遇到了让.htaccess中的mod_rewrite规则工作的问题。 我确实理解为了性能,让它坐在那里会更明智但我在文档根目录上提供了php文件夹,我不希望应用这些相同的规则。

这就是..任何和所有的帮助将不胜感激!

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/([^/]*)/(\d+)/? /index.php?p=$1&id=$2 [QSA,L]
    RewriteRule ^/([^/]*)/([^/]*)/(\d+)/? /index.php?p=$1&s=$2&id=$3 [QSA,L]
    RewriteCond %{REQUEST_URI} !/(manual|admin|awstats)
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
    RewriteRule ^/([^/]*)/?([^/]*)/? /index.php?p=$1&s=$2 [QSA,L]
</IfModule>

使用其他配置进行编辑:

<Location "/admin/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE site.settings
    #PythonDebug Off
</Location>

Alias /adminmedia/ "/usr/lib/python2.4/site-packages/django/contrib/admin/media/"

<Directory "/usr/lib/python2.4/site-packages/django/contrib/admin/media">
    Options -Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

2 个答案:

答案 0 :(得分:2)

正如@Jason McCreary所说,你可以把你的重写规则放在<Directory>部分。它仅限于该目录。 Directory.htaccess的主要优势在于您不需要在AllowOverride中允许任何内容。那就是:

  • 更安全:没有人使用.htaccess(use AllowOverride None)改变apache配置的风险
  • 更快:apache不需要在您的目录或所有父目录中搜索任何.htaccess(我们AllowOverride None部分中的<Directory />,请继续文件系统的顶部)

现在,在.htaccess文件中使用重写引擎时存在一些差异,例如,您可能需要使用 rewriteBase

答案 1 :(得分:1)

确保目录配置了AllowOverride FileInfo(这是使用RewriteEngine所必需的)