某些服务器会在与主域名相同的文件夹中创建子域名文件夹。
因此,如果一个主域名将news.php页面重写为/ news(只是因为SEO原因删除了php扩展名)和/ news文件夹同时存在,则用户被重定向到/ news文件夹而不是news.php文件。
我可以将特定文件夹重定向到文件:
RedirectMatch 301 ^/plotki/?$ /plotki.php
但是如何将所有这些文件重定向到与目录相同的文件名,例如/ tags,/ scripts等以及主目录中的所有php文件?
答案 0 :(得分:0)
如果我正确理解了问题:当主文件夹中存在文件时,您不需要重写。但是,如果匹配一个文件夹,它也不应该重写为一个文件。
让我们假设您希望所有流量都“index.php”,但不希望文件“news.php”(位于主文件夹中),也不希望文件夹“/ include /”重定向到index.php
最简单的方法是使用重写规则。为此,您首先需要打开rewriteEngine
文件中的.htaccess
。
RewriteEngine On
rewriteEngine适用于条件和重写。在您的情况下,在重写之前可能会有多个应该满足的等级。如果不满足其中一个条件,请不要重写。
以下行测试“请求URI”是否包含文本“/ include /”。只有当它不包含在url中时,它才会让你继续到下一行并最终重写。您可以放置所有异常,如下例所示。请注意,您可以使用正则表达式! [NC]
表示“无案例”more info
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 ['REQUEST_URI']来获取你需要的所有数据!
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !index.php [NC]
RewriteRule ^(.*)$ /index.php [L]
您可以使用http://htaccess.madewithlove.be/来测试您的htaccess条件。该脚本将告知是否满足条件。 请注意,该网站不支持所有变量,例如%{REQUEST_FILENAME}
==编辑==
如果您只想将流量重定向到/ 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