htacess将所有页面重定向到home,除了admin目录

时间:2017-05-11 08:38:33

标签: php .htaccess redirect

我的htaccess文件有以下代码:

RewriteCond %{REQUEST_URI} !^/admin/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !/admin
RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|bmp|png|tiff|css|js)$ [NC]
RewriteRule ^(.*)$ /index.php [L]

我知道编码但对正则表达式并不好,我之前没有使用过htaccess文件。 我找到了this answerthis one但是他们没有达到我的要求。

我使用目录名作为permlinks。例如,如果用户输入www.mydomaincom/about,则JavaScript代码将提取目录名称,与数据库进行比较并轮询页面。当地址用www.mydomaincom/about/之类的尾部斜杠编写时,它也有效。但这种表示法存在问题。

奇怪的是,页面正在尝试从index.php读取html数据,这是AOK。但是......需要源代码如<img>, <style>, <script>或需要源目录的样式属性的元素正试图从about/目录中寻找源代码,就好像它存在一样。

我正在搜索一个htaccess解决方案,它会使www.mydomaincom/about/符号与www.mydomaincom/about的行为相同,而不会影响源属性或属性。

1 个答案:

答案 0 :(得分:1)

您的代码中有太多行:

RewriteCond %{REQUEST_URI} !^/admin/
RewriteCond %{REQUEST_URI} !/admin

这些看上去做同样的事情,但他们不这样做 第一个是&#34;如果开始(^/admin&#34; 第二个是&#34;如果它实际上 /admin&#34;

两者都不是你想要的:

RewriteCond %{REQUEST_URI} !^/admin

这样做&#34;如果它/admin&#34;开头。这还包括/admin/,因为它以/admin

开头

第二个奇怪的组合就是:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|bmp|png|tiff|css|js)$ [NC]

第一个是&#34;如果不是文件&#34;
你做的第二个&#34;如果它一个css,js,png等&#34;
最后一行是不需要的,因为文件类型是文件,所以你检查两次相同的东西。

第三,您可能希望将url传递给index.php。 Shortend并将其传递给index.php如下所示:

RewriteCond %{REQUEST_URI} !^/admin
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?url=$1 [L]