.htaccess:动态规则并禁止所有

时间:2013-10-21 13:24:28

标签: php apache .htaccess web

我的项目中有以下架构:

应用程序/  模块/   例/    控制器/    查看/    网络/     CSS /      style.css文件     IMG / 核心/ 的index.php

我想将所有REQUET_URI重定向到我的index.php。使用以下.htaccess内容很容易:

RewriteEngine   On
RewriteCond     %{REQUEST_FILENAME}             !index\.php
RewriteRule     ^(.*)$                          index.php/$1 [L]

但是现在如果我要求www.domain.ext / Application / Modules / Example / Web / css / style.css,它将不起作用。这是我的期望,因为我想重写我的“模块”的URL,如:www.domain.ext / ModuleName / [...] 上一个链接会给我文件www.domain.ext / Application / Modules / ModuleName / Web / [...。]

例如:www.domain.ext / ModuleName / css / style.css会给我文件www.domain.ext / Application / Modules / ModuleName / Web / css / style.css 对于www.domain.ext / ModuleName / my_file.xml =>也是如此。 www.domain.ext /应用/模块/模块名/网络/ my_file.xml 等等..

但我不知道该怎么做。我希望保留所有目录“拒绝所有人”。

谢谢:)

3 个答案:

答案 0 :(得分:1)

您应该使用此规则:

RewriteEngine On

RewriteRule !^Application/Modules/ Application/Modules/%{REQUEST_URI} [L,NC]

# not already rewritten
RewriteCond %{ENV:REDIRECT_STATUS} ^$
# not a file
RewriteCond %{REQUEST_FILENAME} !-f
# not a directory
RewriteCond %{REQUEST_FILENAME} !-d
# forward to index.php
RewriteRule ^(.*)$ index.php/$1 [L]

答案 1 :(得分:0)

好吧,假设您希望能够访问index.php文件中的slug,您可以这样做:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !index\.php
RewriteRule ^(.*)$ index.php/?request=$1 [L]

答案 2 :(得分:0)

试试这个

RewriteEngine on
RewriteBase /

# Rewrite if the file does not exists
RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !index\.php

# Rewrite any assets file
RewriteRule ^(.*)/(.*).(css|js|png|jpe?g|xml|gif)$ index.php/Application/Modules/$1/$2.$3 [L]
RewriteRule ^(.*)/(.*)/(.*).(css|js|png|jpe?g|xml|gif)$ index.php/Application/Modules/$1/$2/$3.$4 [L]

这些规则应该重定向:

www.domain.ext/Example/css/style.css

www.domain.ext/Application/Modules/Example/Web/css/style.css

www.domain.ext/ModuleName/my_file.xml

www.domain.ext/Application/Modules/ModuleName/Web/my_file.xml

编辑:抱歉,这是我的错误,我做错了规则

根据我的测试,这给了我内部500错误:

index.php/Application/Modules/$1/$2.$3 [L]

但如果我使用QUERY_STRING ?就行了

index.php?Application/Modules/$1/$2.$3 [L]
---------^

因此最好使用QUERY_STRING变量,如:

index.php?page=Application/Modules/$1/$2.$3 [L]

使用以下命令检索php中的内容:

<?php

$page = $_GET['page']; // Application/Modules/Example/Web/css/style.css