仅在404发生时才使用mod_rewrite

Yac*_*oby 2 .htaccess mod-rewrite content-management-system

我正在使用cms将静态网站转换为静态网站.我将cms安装在公共目录的子目录中.为了避免丑陋的域名(http://example.com/cms/),有一种简单的方法可以使用mod_rewrite将http://example.com/ ...重写为http://example.com/cms/ ...同时确保如果请求不会在404中结束,则没有重定向.

一个例子:

/
/cms/index.html
/cms/file.dat
/file.dat
Run Code Online (Sandbox Code Playgroud)

如果用户请求/index.html,它们应该被重定向到/cms/index.html,但是如果它们请求/file.dat,它们不应该被重定向到/cms/file.dat,因为该文件存在于所请求的地点

编辑 感谢您的回答.

Pas*_*TIN 5

您可以使用RewriteCond指令检查是否存在与请求的URL对应的现有文件,如果没有,则仅重写到CMS.

这是一个简单的例子:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php 
Run Code Online (Sandbox Code Playgroud)

如果没有与请求的URL对应的现有文件,则重写该请求 index.php

您可能还想检查符号链接和/或目录,顺便说一句......
例如,在设置Zend Framework项目时可以使用以下方法:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Run Code Online (Sandbox Code Playgroud)

(即使它链接到ZF,它应该适用于很多项目)