.htaccess RewriteRule ^。* $ - [S = 40]到Nginx

时间:2013-03-27 10:38:36

标签: .htaccess mod-rewrite nginx

我在appache上设置了https://github.com/lencioni/SLIR。它有一个htaccess文件,效果很好。现在我已经转移到Nginx并希望SLIR以相同的方式工作。以下是我需要转换的内容。

# Prevent other scripts from interfering with SLIR
php_value auto_prepend_file none
php_value auto_append_file none

# Pretty URLs
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [S=40]
RewriteRule . index.php [L]
</IfModule>

# Prevent viewing of the error log file in its default location
<Files slir-error-log>
Order Deny,Allow
Deny from All
</Files>

我能够转换除下面一行以外的所有内容

RewriteRule ^.*$ - [S=40]

有什么想法吗? 感谢

2 个答案:

答案 0 :(得分:1)

试试这个:

if (!-f $request_filename) { rewrite ^.*$ /index.php last; } # check for file
if (!-d $request_filename) { rewrite ^.*$ /index.php last; } # check for dir
在我的服务器上检查

编辑 - 此单行适用于(dir和文件)

if (!-e $request_filename) { rewrite ^(.+)$ /index.php last; }

答案 1 :(得分:0)

S标志告诉mod_rewrite跳过以下一些规则(在您的情况下,它 40 )。您也可以改变您的规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

可能更容易转换。