一些服务器在与主域相同的文件夹中创建子域文件夹。
因此,如果主域将news.php页面重写为/news (出于SEO原因仅为了删除php扩展)和/news文件夹同时存在,则用户将被重定向到/news文件夹而不是news.php文件。
我可以将特定文件夹重定向到以下文件:
RedirectMatch 301 ^/plotki/?$ /plotki.php但是,如何将它们都重定向到与目录相同的文件名(除了/tags、/scripts等以及主目录中的所有php文件)?
发布于 2015-10-13 13:14:47
如果我正确地理解了这个问题:当主文件夹中存在一个文件时,您不需要重写。但是,如果一个文件夹是匹配的,它也不应该重写到一个文件。
让我们假设您希望将所有流量都转到" index.php“,但不希望将文件"news.php”(位于主文件夹中)或文件夹"/include/“重定向到index.php
要做到这一点,最简单的方法是使用重写规则。为此,您首先需要在rewriteEngine文件中打开.htaccess。
RewriteEngine OnrewriteEngine处理条件并重写。在您的情况下,在重写之前,可能需要满足多个条件。如果其中一个条件没有得到满足,就不要重写。
下面的行测试“请求URI”是否包含文本"/include/“。只有当它不包含在url中,它将允许您继续到下一行,并最终重写。您可以将所有异常放置在下面的示例中。注意,您可以对此使用正则表达式![NC]的意思是"No-case“更多信息。
RewriteCond %{REQUEST_URI} !/include/ [NC]
RewriteCond %{REQUEST_URI} !(/include/|/folder 2/|/folder[0-9]{2}) [NC]在将所有异常设置为重写条件后,您希望确保如果文件存在于服务器上,则重写规则不适用。这是通过包含"!-f“的行完成的。最后,当请求URL已经是index.php文件时,您必须确保不应用重写规则(否则您将得到一个内部、以太循环和505错误)。最后一行将所有数据发送到index.php。请注意,我不向index.php发送任何附加参数。在index.php中,您可以读取$_SERVER‘read’来获取所需的所有数据!
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !index.php [NC]
RewriteRule ^(.*)$ /index.php [L]您可以使用http://htaccess.madewithlove.be/测试htaccess条件。脚本将判断是否满足某个条件。请注意,网站不支持像%{REQUEST_FILENAME}这样的所有变量。
==Edit==
如果您只想将流量重定向到/page/.到page.php,但保留所有其他通信量,因为您可以再设置一个条件。
RewriteCond %{REQUEST_URI} !/include/ [NC]
RewriteCond %{REQUEST_URI} ^/page/ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !page.php [NC]
RewriteRule ^(.*)$ /page.php [L]^/page/的意思是:^表示字符串的开头,因此,请求URI必须以/page/开始,以便匹配条件。如果它这样做了,它将继续并将该url重写为page.php。
https://stackoverflow.com/questions/33102709
复制相似问题